首页 > 解决方案 > 分析器为编译单元创建多个诊断

问题描述

我正在编写一个 Roslyn 诊断程序来严格打开/关闭选项。由于每个文件只能有一个,因此我正在使用要检查的节点的编译:

context.RegisterSyntaxNodeAction(CompilationUnitCheck, SyntaxKind.CompilationUnit);

运行开发配置单元时,我看到错误列表窗格中显示了多个诊断信息,有时多达 3 个,但每个文件始终至少 2 个。它们显示相同的位置。可能是什么原因造成的,我能做些什么来解决它?

    private void CompilationUnitCheck(SyntaxNodeAnalysisContext context)
    {          
        var orgRoot = (CompilationUnitSyntax) context.Node;

        var fileName = System.IO.Path.GetFileNameWithoutExtension(orgRoot.SyntaxTree.FilePath) ;
        if ((fileName?.EndsWith("designer", StringComparison.CurrentCultureIgnoreCase)).GetValueOrDefault() || 
            "Reference".Equals(fileName, StringComparison.CurrentCultureIgnoreCase))
        {
            return;
        }

        if (fileName != "TestFile") return;

        var newErrors = fileName == "TestFile";


        var location =  orgRoot.GetLocation();

        string strictMsg = null ?? "Off";

        var diagnostic = Diagnostic.Create(Rule, location, strictMsg);
        context.ReportDiagnostic(diagnostic);
    }

我目前的解决方法是获取根的哈希码,并将其存储在静态列表中,如果它在列表中,我不再检查。

标签: roslyn-code-analysis

解决方案


推荐阅读