如何在Visual Studio Code上为OmniSharp设置C#格式选项?

27

我试图利用与Visual Studio Code的整合,但无法弄清如何设置C#格式选项。在我的Mac上OmniSharp exe旁边的config.json (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/jrieken.vscode-omnisharp/bin/packages/OmniSharp/config.json)与标准的 OmniSharp config.json 格式不匹配,因此设置大括号+换行行为属性并没有起作用,例如methodBraceStyle。但是,设置tabSize等确实有效。


你解决过这个问题吗?我已经浪费了半天的时间,只是为了正确设置我的C#大括号。 - Jaybeecave
5个回答

35

使用最新的Omnisharp(dev分支)和与我的项目的.sln文件在同一文件夹中的omnisharp.json(下面粘贴)后,我终于让它工作了。自从v1.9-beta18以来,它应该适用于所有发布版本,我只是因为不使用受支持的系统而从源代码编译了它。

{
    "FormattingOptions": {
        "newLine": "\n",
        "useTabs": false,
        "tabSize": 4,
        "indentationSize": 4,

        "NewLinesForBracesInTypes": false,
        "NewLinesForBracesInMethods": false,
        "NewLinesForBracesInProperties": false,
        "NewLinesForBracesInAccessors": false,
        "NewLinesForBracesInAnonymousMethods": false,
        "NewLinesForBracesInControlBlocks": false,
        "NewLinesForBracesInAnonymousTypes": false,
        "NewLinesForBracesInObjectCollectionArrayInitializers": false,
        "NewLinesForBracesInLambdaExpressionBody": false,

        "NewLineForElse": false,
        "NewLineForCatch": false,
        "NewLineForFinally": false,
        "NewLineForMembersInObjectInit": false,
        "NewLineForMembersInAnonymousTypes": false,
        "NewLineForClausesInQuery": false,
    }
}

可用属性列于FormattingOptions.csomnisharp-roslyn存储库中列出。

15

OmniSharp-Roslyn Wiki上的配置选项

在启动时,OmniSharp会按以下(分层)顺序获取配置选项:

  • 硬编码默认值
  • 环境变量
  • 命令行参数
  • 位于%USERPROFILE%/.omnisharp/中的omnisharp.json文件
  • 位于OmniSharp指向的工作目录中的omnisharp.json文件

每个配置来源都可以覆盖之前来源设置的任何设置。

根据一位开发人员的博客文章总结以上配置位置:

  • 默认设置在OmniSharp扩展目录下的config.json中指定。不建议修改此文件。
  • 环境变量和命令行参数对于C#扩展没有真正适用/有用。
  • omnisharp.json放置在%USERPROFILE%\.omnisharp\(或~/.omnisharp/)中以获取特定于用户的设置。
  • omnisharp.json放置在项目目录中以获取特定于项目的设置。
  • 在每个级别上覆盖单个设置;不需要重复整个配置。

在Visual Code v1.42.0上使用v1.21.11的ms-vscode.csharp扩展进行测试,似乎OmniSharp仅应用位于工作区文件夹根目录中的omnisharp.json,而不是子目录中的omnisharp.json详见此处

Visual Studio Code的C#扩展支持EditorConfig,可以通过以下方法之一启用:

  • 文件首选项设置扩展C#配置启用OmniSharp:编辑器配置支持
  • settings.json中…
{
    "omnisharp.enableEditorConfigSupport": true,
}
{
    "FormattingOptions": {
        "enableEditorConfigSupport": true
    }
}

13

谢谢!我已经折腾了5个小时,试图让配置文件正常工作。这就是缺失的那一部分。 - Voxar

5

Linux 用户:

  1. 前往 Linux 主目录
  2. 打开 .omnisharp 文件夹 (默认情况下是隐藏的,所以请在文件资源管理器中勾选“显示隐藏文件”)
  3. 创建一个名为 omnisharp.json 的文件
  4. 输入 上述给出的代码

这是针对那些不想为每个项目重复执行这些步骤的全局解决方案。

重要提示: 从 doc.microsoft.com/... 安装 dotNet SDK 时选择正确的 Linux 版本非常重要!否则 omnisharp 将无法正确安装,上述代码也将无法运行。


把onmisharp.json文件放在项目根目录下对我没有起作用,但是这个方法有效(Manjaro Linux),谢谢。 - Scott Hather
我像个傻瓜一样在谷歌上搜索,试图弄清楚这个神奇的“Home”目录应该是什么。我的项目文件夹?VS Code安装文件夹? - Raoul L'artiste
答案中提到“Linux用户”,因此我推测这是您的用户主目录,通常为/home/username - dequid
我正在使用基于Debian的Linux系统,它默认拥有一个Home目录。这个目录既不属于你的项目,也不属于VSCode的文件夹。 - Reza Taba

1

对我来说,重要的是我已经安装并配置了Prettier作为默认格式化程序(editor.defaultFormatter)。一旦我更改了此设置并重新启动了Omnisharp,格式化就起作用了。

还要注意的是,设置omnisharp.enableEditorConfigSupport应该设置为false(正如g0nk在他们的答案中指出的那样),否则它将无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接