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

在C# Roslyn分析器中,能否检测指定Diagnostic是否启用以跳过昂贵检测?

在多诊断Roslyn分析器中按需跳过高开销检测

当然可以在支持多诊断的分析器内部实现这个逻辑,核心是通过分析上下文提供的配置选项判断特定诊断的启用状态:

  • 具体实现步骤:

    1. 在分析方法(比如SyntaxNodeAction、CompilationAction这类回调)中,从当前AnalysisContext获取AnalyzerOptions
    2. 调用ConfigOptions.IsDiagnosticEnabled()方法,传入你要检查的目标DiagnosticDescriptor
    3. 如果返回false,直接跳过后续高开销的检测代码
  • 示例代码片段:

public override void Initialize(AnalysisContext context)
{
    context.EnableConcurrentExecution();
    context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);

    // 注册针对方法声明的分析回调
    context.RegisterSyntaxNodeAction(ctx =>
    {
        // 获取配置选项并检查目标诊断是否禁用
        var configOptions = ctx.Options.ConfigOptions;
        if (!configOptions.IsDiagnosticEnabled(MyHighCostDiagnostic))
        {
            return; // 直接跳过高开销逻辑
        }

        // 这里执行你的高开销模式检测和Diagnostic生成逻辑
        // ...
    }, SyntaxKind.MethodDeclaration);
}
  • 额外说明:
    • 这个方式能识别所有常见的禁用配置:ruleset文件、项目属性里的NOWARN、.editorconfig中的设置,甚至是全局级别的配置
    • 不需要拆分分析器类,同一个多诊断分析器里可以为不同诊断单独做状态检查
    • 要确保传入的DiagnosticDescriptor是你定义的对应诊断实例,ID必须完全匹配,否则会判断错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:21:14