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 跑一段时间,清理完存量再把确认的规则提升为错误。