用途:指导编写自定义 Roslyn 分析器、代码修复提供程序、代码重构提供程序和诊断抑制器,覆盖项目搭建、DiagnosticDescriptor 约定、分析上下文注册、代码修复与重构动作、多 Roslyn 版本目标(3.8 至 4.14)、使用 Microsoft.CodeAnalysis.Testing 测试、NuGet 打包及性能最佳实践。
主要能力:分析器项目须以 netstandard2.0 为目标,并设置 EnforceExtendedAnalyzerRules、IsRoslynComponent、LangVersion 为 latest;Roslyn SDK 包使用 PrivateAssets="all"。分析器继承 DiagnosticAnalyzer 并加 [DiagnosticAnalyzer(LanguageNames.CSharp)],通过 RegisterSyntaxNodeAction、RegisterSymbolAction、RegisterOperationAction、RegisterSyntaxTreeAction、RegisterCompilationStartAction、RegisterCompilationAction 注册分析。诊断 ID 避免使用 CA、CS、RS、IDE、IL、SYSLIB 前缀,默认严重级别多为 Warning,helpLinkUri 不可为空。代码修复需唯一 equivalenceKey 以支持 FixAll,注意保留 trivia。诊断抑制器适用于 EditorConfig 无法表达的条件抑制,需 Roslyn 3.8+。多版本目标使用 ROSLYN_X_Y_OR_GREATER 条件编译常量与版本化 NuGet 路径。测试使用 CSharpAnalyzerVerifier 与诊断标记语法。打包时程序集放入 analyzers/dotnet/cs/,设置 IncludeBuildOutput=false、DevelopmentDependency=true、SuppressDependenciesWhenPacking=true。性能上应在编译开始时解析类型、缓存 SupportedDiagnostics、启用并发执行、尽早过滤、避免 Compilation.GetSemanticModel()。
限制:不涉及消费和配置现有分析器(CA 规则、严重级别)、源生成器(IIncrementalGenerator)编写及命名约定,这些属于其他技能范围。扩展代码示例见该技能目录中的 details.md。