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

如何在Roslyn分析器中获取给定或当前编译的已定义预处理器符号

在Roslyn分析器中获取预处理器符号的方法

获取当前编译的已定义预处理器符号

在Roslyn分析器里,你可以通过Compilation对象的CompilationOptions属性拿到当前编译的预处理器符号。一般在Initialize方法中注册CompilationStartAction,就能获取当前编译的上下文:

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

    context.RegisterCompilationStartAction(compilationContext =>
    {
        // 获取当前编译的预处理器符号集合
        var preprocessorSymbols = compilationContext.Compilation.Options.PreprocessorSymbolNames;
        
        // 遍历所有符号
        foreach (var symbol in preprocessorSymbols)
        {
            // 示例:输出符号到诊断信息
            compilationContext.ReportDiagnostic(Diagnostic.Create(
                Rule,
                Location.None,
                $"已定义预处理器符号: {symbol}"));
        }
        
        // 检查是否包含特定符号
        if (preprocessorSymbols.Contains("DEBUG"))
        {
            // 执行DEBUG模式专属逻辑
        }
    });
}

PreprocessorSymbolNames返回ImmutableHashSet<string>,包含当前编译所有已定义的预处理器符号(涵盖项目配置、命令行参数等方式定义的符号)。

获取指定编译的已定义预处理器符号

如果你已经持有一个Compilation实例(比如从项目模型、语法树的编译上下文获取),直接访问其Options.PreprocessorSymbolNames属性即可:

// 假设已有Compilation实例compilation
var preprocessorSymbols = compilation.Options.PreprocessorSymbolNames;

// 检查是否包含RELEASE符号
bool isReleaseMode = preprocessorSymbols.Contains("RELEASE");

注意:符号名称区分大小写,DEBUG和debug会被视为不同符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:33:20