如何使分析器项目特定?

时间:2015-08-04 02:16:53

标签: c# roslyn analyzer

Microsoft.CodeAnalysis(néeRoslyn)允许您创建“分析器”以在Visual Studio中检查您的代码,并(可选)提供代码修复以自动解决问题。

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

因此,对于您团队的项目,您可以为团队添加“条件编译符号”条目,例如MYTEAM

接下来在您的分析器中,您的上下文应该为您提供一些AST节点,您可以从中获取当前语法树。从语法树中,您可以获取其选项,其中包括一组活动预处理程序符号(“条件编译符号”)。因此,要使分析器特定于您的团队,只需在您找不到自定义符号时中止:

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

    // Code for your team-specific analyzer follows
}

这感觉就像一个黑客,所以我想知道这是否是使用Roslyn约束分析仪的惯用方法。或许还有更好的方法? (并且通过“更好”的方式,我的意思是能够确定是否使用您的分析器而不必修改“条件编译符号”。也许通过询问是否存在自定义汇编级属性。)

1 个答案:

答案 0 :(得分:3)

如果您将分析器添加到项目的命令行选项(右键单击解决方案资源管理器中的References下的Analyzers节点,或通过NuGet包),而不是安装您的vsix,那么它将与该项目联系在一起。此外,它还将作为命令行的一部分运行,并且也可以构建持续集成。