roslyn分析仪提出警告,后来被删除

时间:2015-12-10 13:53:34

标签: c# visual-studio-2015 roslyn

我有一台基于分析仪默认模板的分析仪。 我的问题是,当执行完全重建时,某些(但不是所有)警告会出现在错误列表中。

当我打开文件时,在打开文件上重新执行分析器时,警告开始消失。 最终所有警告消失

我是否错误地注册了这些分析仪。理想情况下,我只希望在正确加载代码模型后执行它们。

关于如何改善这一点的任何建议都会很棒。

    public override void Initialize(AnalysisContext context)
    {
        context.RegisterSyntaxNodeAction(
            this.HandleClassDeclaration,
            SyntaxKind.ClassDeclaration);
    }

此代码分析器文档(在本例中)是关于类声明的。 当Xml文档节点不存在时,它会报告诊断信息。

    private void HandleClassDeclaration(SyntaxNodeAnalysisContext context)
    {
        // THE CHECK IN MY ANSWER BELOW GOES HERE...
        var declaration = (ClassDeclarationSyntax)context.Node;
        {
            var hasDocumentation = declaration.HasDocumentation();
            if (!hasDocumentation)
            {
                var diagnostic = Diagnostic.Create(this.Descriptor, declaration.Identifier.GetLocation());
                context.ReportDiagnostic(diagnostic);
            }
        }
    }

我正在使用此代码查找文档。

    public static DocumentationCommentTriviaSyntax GetDocumentationCommentTriviaSyntax(this SyntaxNode node)
    {
        if (node == null)
        {
            return null;
        }

        foreach (var leadingTrivia in node.GetLeadingTrivia())
        {
            var structure = leadingTrivia.GetStructure() as DocumentationCommentTriviaSyntax;

            if (structure != null)
            {
                return structure;
            }
        }

        return null;
    }

2 个答案:

答案 0 :(得分:1)

是否可以将错误列表切换为仅构建视图并查看警告是否仍然存在?

如果警告仍然存在,则表示警告是由命令行构建生成的。如果打开文档后警告消失,这意味着实时分析认为没有问题。由于构建和实时分析之间的这种差异,问题可能会发生。

如果是这样的话,那将是roslyn中的一个错误。 (更具体地说,实时分析和命令行构建之间的编译选项中的错误 - VS内部的构建也是命令行构建,具有稍微不同的选项)

答案 1 :(得分:0)

对于其他任何试图分析Roslyn中的文档的人,需要进行检查

File