分析器为编译单元创建多个诊断

时间:2019-07-11 22:32:55

标签: roslyn-code-analysis

我正在编写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);
    }

0 个答案:

没有答案