Microsoft.CodeAnalysis(原名 Roslyn)允许您创建“分析器”来检查 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
}
这感觉像是一个 hack,所以我想知道这是否是使用 Roslyn 约束分析器的惯用方法。或者也许有更好的方法? (通过“更好”的方式,我的意思是能够确定是否使用分析器,而不必修改“条件编译符号”。也许通过询问自定义程序集级属性是否存在。)
最佳答案
如果您将分析器添加到项目的命令行选项中(右键单击“解决方案资源管理器中的引用”下的“分析器”节点,或通过 NuGet 包),而不是安装 vsix,那么它将与该项目相关联。此外,它也将作为命令行和持续集成构建的一部分运行。
关于c# - 如何使分析仪针对特定项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799634/