首页/开发/代码质量与评审速查/Roslyn Analyzers:.NET 静态分析
规范与静态检查65 条

Roslyn Analyzers:.NET 静态分析

Roslyn 分析器在编译期对 C#/VB 报告诊断:内置 CA 系列规则加第三方分析器,通过 .editorconfig 或规则集设置严重级别,支持仅对新增代码生效。

Roslyn Analyzers 是什么

Roslyn 分析器在编译期对 C# 与 VB 代码报告诊断:既有 .NET SDK 内置的 CA 系列规则,也有第三方分析器包。严重级别通过 .editorconfig 或规则集文件设置,可取 none、suggestion、warning、error,配合 SDK 开关还能做到只对新增代码生效,避免历史代码一次性爆出一批告警。

基本信息

载体NuGet 分析器包 + 仓库内的 .editorconfig
级别取值none / suggestion / warning / error
相关开关EnableNETAnalyzers、AnalysisLevel
生效时机编译期,随 dotnet build 一起执行
门禁方式提升为 error,或用 TreatWarningsAsErrors

典型使用场景

  • 团队统一 C# 规范,把规则级别写进仓库的 .editorconfig
  • 升级 SDK 前先锁 AnalysisLevel,摸清新增规则的影响面
  • 对核心服务启用更严格的规则集合,脚本项目保持宽松
  • 把公共 API 的参数校验类规则设为警告,减少运行期空引用
  • CI 中把警告当错误,阻止新增告警进入主干

editorconfig 片段

editorconfig 片段
[*.cs]
dotnet_diagnostic.CA1062.severity = warning  # 公共方法参数未做空值检查
dotnet_diagnostic.CA2007.severity = none     # 不强制 ConfigureAwait(按项目场景决定)
dotnet_diagnostic.CA1303.severity = warning  # 不要把用户可见文案硬编码在代码里

# 命令行检查
dotnet build /p:TreatWarningsAsErrors=true

常见 CA 规则

  • CA1062:公共方法的引用类型参数未做空值检查
  • CA2007:await 调用未考虑上下文捕获,按应用类型决定是否要求
  • CA1303:把面向用户的文案硬编码在代码里
  • CA1822:可以标记为静态的成员仍写成了实例方法
  • CA2000:对象在释放前丢失引用,可能造成资源泄漏

规则设置位置

设置位置作用范围说明
editorconfig 文件所在目录及其子目录随仓库走,评审可见,新项目首选
规则集文件单个项目旧式做法,迁移成本需评估
命令行参数单次构建适合临时验证,不落到仓库
分析器包引入该包的项目第三方规则随包版本更新
规则默认值随 SDK 版本升级而变化:锁住 AnalysisLevel 再按需提升,可以避免升级当天冒出一批新告警,让调整节奏由团队掌握。
把大量规则一次性设为 error 却没有分批计划,构建会被历史问题卡死;先按 warning 跑一段时间,清理完存量再把确认的规则提升为错误。

易错点

  • 不锁 AnalysisLevel:SDK 升级后新规则批量告警,团队被迫整体降级
  • 全部设为 error 却无分批计划:构建被历史问题卡死
  • 抑制属性不写原因:问题被压下去但无人敢动,真实缺陷也一起被掩盖
  • .editorconfig 只放在个人 IDE:规则不进仓库,同事与 CI 的判定不一致

数据来源与参考

  • Microsoft Learn · .NET 代码分析(Roslyn analyzers)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌