VS Code中OmniSharp C#扩展无法格式化C#文件提示缺格式化器
问题根因
v1.25.0版本的ms-dotnettools.csharp(基于OmniSharp的官方C#扩展)存在激活逻辑bug:如果打开的工作区根目录没有直接存放.csproj或.sln文件(比如当前打开的是包含C#、Angular多类项目的上层根目录,C#项目在子文件夹中),扩展不会自动向VS Code注册C#文件的格式化服务提供者,即便OmniSharp服务本身启动正常,按下格式化快捷键时也会弹出“没有为csharp文件安装格式化程序”的提示。
注意不要点击弹窗里的「Install Formatter」按钮,该选项会引导安装微软新推出的C# Dev Kit扩展,和当前基于OmniSharp的老版本C#扩展存在配置冲突,安装后反而会加剧功能异常。
解决步骤(按顺序操作即可)
- 手动指定C#文件默认格式化程序
按下Ctrl+,打开VS Code设置,搜索editor.defaultFormatter,点击页面右上角的「打开设置(JSON)」图标,在配置文件中添加如下内容:
该配置会强制指定C#文件使用官方OmniSharp扩展作为格式化程序,绕开扩展自动注册失败的问题。"[csharp]": { "editor.defaultFormatter": "ms-dotnettools.csharp" } - 补全OmniSharp加载配置
继续在settings.json中添加以下配置,解决多目录工作区下OmniSharp找不到C#项目、不加载格式化服务的问题:
配置里的sln路径替换成你自己工作区中C#解决方案的实际相对路径即可。"omnisharp.dotNetCliPaths": ["C:\\Program Files\\dotnet\\"], "omnisharp.projectLoadTimeout": 120, "omnisharp.enableEditorConfigSupport": true, "omnisharp.slnPath": ".\\你的C#项目存放子目录\\你的解决方案文件名.sln" - 清除缓存重启服务
- 按下
Ctrl+Shift+P调出命令面板,输入并执行OmniSharp: Restart OmniSharp,等待服务重新初始化完成后再尝试格式化 - 如果上述操作无效,完全关闭VS Code,打开资源管理器进入
%USERPROFILE%\.vscode\extensions\ms-dotnettools.csharp-1.25.0-win32-x64\.omnisharp目录,删除该目录下所有缓存文件,重新打开VS Code等待OmniSharp加载完成即可。
- 按下
- 兜底降级方案
如果以上操作都无法解决问题,属于v1.25.0版本的其他兼容缺陷,可以回退扩展到稳定版:打开VS Code扩展面板,找到C#扩展,点击扩展卡片右下角的下拉箭头,选择「安装另一个版本」,选中1.24.4版本安装,完成后重启VS Code即可,该版本不存在多工作区下格式化程序注册失败的问题。
内容的提问来源于stack exchange,提问作者serge
相关产品推荐
相关产品推荐

