c# - 如何使分析仪针对特定项目?

标签 c# roslyn analyzer

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/

相关文章:

svn - 分析SVN磁盘空间

c# - 正在删除程序集 : part from AssemblyInfo. cs

c# - 设置标签控件的宽度

c# - 如何从 sql 多个表(具有外键的相关表)生成 c# 类

javascript - 为什么 Ajax 调用没有被命中?

.net-core - .NET 5 未编译为单个文件可执行文件

c# - 在 Roslyn 与 Microsoft.CodeAnalysis 中添加元数据引用

elasticsearch - 边缘 ngram token 过滤器与 ngram token 过滤器有何不同?

ios - 奇怪的 Xcode 分析结果

c# - 为什么我们不能在 C# 中重写方法时更改访问修饰符?