簡體   English   中英

Roslyn診斷分析器的診斷未反映在Visual Studio實例中

[英]Roslyn Diagnostic Analyzer's diagnosis not reflecting in Visual Studio instance

我試圖檢測模型作為參數傳遞給MVC應用程序的控制器中的函數。 我為Roslyn診斷分析器編寫了一個代碼。 代碼背后的邏輯工作正常,因為斷點按預期命中。 但是警告方面的診斷結果並未反映在視覺工作室實例中。

這是我的診斷分析器的代碼片段:

public override void Initialize(AnalysisContext context)
{
    // TODO: Consider registering other actions that act on syntax instead of or in addition to symbols
    context.RegisterSyntaxNodeAction(AnalyzeSymbol, SyntaxKind.MethodDeclaration);
}

private async static void AnalyzeSymbol(SyntaxNodeAnalysisContext context)
{
    var method = (MethodDeclarationSyntax)context.Node;

    ParameterListSyntax ParamList = method.ParameterList;
    int flag = 0;
    string ParamName = null;

    foreach (ParameterSyntax Param in ParamList.Parameters)
    {
        if (Param.Type.ToString().Contains("Model"))
        {
            ParamName = Param.Type.ToString();
            flag = 1;
            break;
        }
    }

    if (flag == 0)
        return;

    string solutionPath = @"C:\Users\Administrator\Documents\Visual Studio 2015\Projects\WebApplication6\WebApplication6.sln";
    var workspace = MSBuildWorkspace.Create();                                                       
    var solution = await workspace.OpenSolutionAsync(solutionPath);

    foreach (var project in solution.Projects)
    {
        foreach (var document in project.Documents)
        {
            CancellationToken source = default(CancellationToken);

            SyntaxNode root = await document.GetSyntaxRootAsync(source);

            var classDeclarations = root.DescendantNodes().Where(n => n.IsKind(SyntaxKind.ClassDeclaration));
            flag = 0;

            foreach (ClassDeclarationSyntax cls in classDeclarations)
            {
                if (cls.Identifier.Text.ToString() == ParamName)
                {

                        var diagnostic = Diagnostic.Create(Rule, method.GetLocation());
                        context.ReportDiagnostic(diagnostic);
                }
            }
        }
    }
}

看起來你是不正確的類搜索。 您應該使用上下文操作,不應該打開新的解決方案。 Context包含有關已打開解決方案的所有必要信

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM