You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中OmniSharp加载自定义DiagnosticAnalyzer不生效排查

OmniSharp 加载自定义 Roslyn 分析器不生效的排查方案

按以下顺序逐步排查即可定位根因:

  • 首先核对分析器依赖版本兼容性
    你基于官方模板创建的分析器,默认可能引用较高版本的 Microsoft.CodeAnalysis 包,而 OmniSharp 内置的 Roslyn 工作区版本是固定的,如果分析器依赖的 CodeAnalysis 版本高于 OmniSharp 内置版本,会出现静默加载失败,不会弹出显式报错。请将核心分析器项目、.CodeFixes 项目引用的所有 Microsoft.CodeAnalysis.* NuGet 包版本统一降到 4.2.0 及以下,和 OmniSharp 当前内置的 Roslyn 版本对齐,重新编译分析器项目后再测试。
  • 修正 Directory.Build.props 作用域问题
    你当前的 Directory.Build.props 放在目标解决方案根目录,会被所有子目录下的项目加载,包括你复制进来的分析器解决方案本身的项目,这会导致分析器项目循环引用自身作为分析器,直接造成加载失败。解决方法是在分析器解决方案所在的子目录下,新建一个空内容的 Directory.Build.props 文件,覆盖上层目录的配置,阻断分析器项目读取上层的项目引用规则。
    另外核对你贴的配置里两个 ProjectReference 的路径:第一个路径开头是 _UnityAnalyzer(带下划线前缀),第二个是 UnityAnalyzer(无下划线),请再次确认路径完全正确,避免隐性的路径解析问题。
  • 移除重复的分析器引用
    .CodeFixes 项目默认已经依赖核心分析器项目,你不需要在 props 里同时引用核心项目和 CodeFixes 项目,重复加载同规则的分析器程序集会导致冲突,直接删除核心分析器项目的 ProjectReference 条目,只保留 CodeFixes 项目的引用即可。
  • 开启 OmniSharp 调试日志定位具体错误
    在 VS Code 设置中打开 omnisharp.loggingLevel 选项,将值设为 debug,重启 OmniSharp 后打开输出面板切换到 OmniSharp 日志通道,搜索你定义的分析器规则ID、AnalyzerAssemblyLoader 相关关键词,就能直接看到具体的加载失败原因,常见的报错包括依赖缺失、程序集平台目标不匹配(请确保分析器项目目标平台设为 AnyCPU,不要指定特定平台)、分析器构造函数抛出未捕获异常。
  • 先在命令行验证分析器配置有效性
    排除 OmniSharp 本身的问题,在目标项目根目录执行 dotnet build /v:detailed,查看编译输出中是否出现你定义的分析器警告/错误:如果命令行编译也没有触发对应诊断,说明是 MSBuild 层面的 props 配置问题,和 OmniSharp 无关;如果命令行下诊断正常输出,只有 OmniSharp 中不显示,可尝试删除项目目录下的 obj、.vs 缓存目录,重启 OmniSharp 重新加载项目即可。
  • 排查规则配置问题
    确认你分析器中声明的诊断ID和.editorconfig里配置的ID完全一致,临时移除.editorconfig里的严重性配置,测试默认严重性下规则是否触发,避免是ID拼写错误导致规则被意外禁用。同时确认分析器类上标记的 DiagnosticAnalyzer 特性中,声明的支持语言和你当前项目的语言一致(C# 项目对应 LanguageNames.CSharp),避免语言不匹配导致规则不执行。

内容的提问来源于stack exchange,提问作者itkdk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:36:14