如何使分析器项目特定?

How to make an analyzer project-specific?

Microsoft.CodeAnalysis (née Roslyn) 允许您创建 "analyzers" 以检查 Visual Studio 内的代码,并(可选)提供代码修复以自动解决问题。

一般来说,您创建的任何分析器在每个项目中都将始终处于活动状态。然而,有时您可能想要为您的团队创建一组分析器,您希望这些分析器只对该团队的项目有效。我能找到的唯一方法是使用自定义预处理器符号。

因此,对于您团队的项目,您可以在 "Conditional compilation symbols" 中为您的团队添加一个条目,例如 MYTEAM

接下来在您的分析器中,您的上下文应该为您提供一些 AST 节点,您可以从中获取当前语法树。从语法树中,您可以获得它的选项,其中包括一组活动的预处理器符号 ("Conditional compilation symbols")。因此,要为您的团队制作一个特定的分析器,如果您没有找到您的自定义交易品种,只需中止:

private void Action(SyntaxNodeAnalysisContext context)
{
    if (!context.Node.SyntaxTree.Options.PreprocessorSymbolNames.Contains("MYTEAM"))
    {
        return;
    }

    // Code for your team-specific analyzer follows
}

这感觉像是一个 hack,所以我想知道这是否是使用 Roslyn 约束分析器的惯用方法。或者也许有更好的方法? (通过 "better" 方式,我的意思是能够确定是否使用您的分析器而无需修改 "Conditional compilation symbols"。也许通过询问自定义程序集级属性的存在。)

如果您将分析器添加到项目的命令行选项(右键单击解决方案资源管理器中“引用”下的“分析器”节点,或通过 NuGet 包),而不是安装您的vsix,那么它将绑定到该项目。此外,它将 运行 作为命令行和持续集成构建的一部分。