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约束分析仪的惯用方法。或许还有更好的方法? (并且通过“更好”的方式,我的意思是能够确定是否使用您的分析器而不必修改“条件编译符号”。也许通过询问是否存在自定义汇编级属性。)
答案 0 :(得分:3)
如果您将分析器添加到项目的命令行选项(右键单击解决方案资源管理器中的References下的Analyzers节点,或通过NuGet包),而不是安装您的vsix,那么它将与该项目联系在一起。此外,它还将作为命令行的一部分运行,并且也可以构建持续集成。