C# 防止对打开的解决方案的每个文件执行语法树操作

C# 防止对打开的解决方案的每个文件执行语法树操作,c#,.net,roslyn,roslyn-code-analysis,C#,.net,Roslyn,Roslyn Code Analysis,我有一个代码分析器,其操作已注册到语法树解析: public override void Initialize(AnalysisContext context) { context.RegisterSyntaxTreeAction(HandleSyntaxTree); } 问题在于,打开解决方案时,会对解决方案的每个(*.cs)文件执行此操作。由于HandleSyntaxTree()方法调用Git的命令行进程,因此对于大型解决方案,这会变得非常缓慢 有没有办法只为编辑器中打开的文件调用

我有一个代码分析器,其操作已注册到语法树解析:

public override void Initialize(AnalysisContext context)
{
    context.RegisterSyntaxTreeAction(HandleSyntaxTree);
}
问题在于,打开解决方案时,会对解决方案的每个(*.cs)文件执行此操作。由于
HandleSyntaxTree()
方法调用Git的命令行进程,因此对于大型解决方案,这会变得非常缓慢

有没有办法只为编辑器中打开的文件调用
HandleSyntaxTree()


EDIT:HandleSyntaxTree()方法的半伪代码

    private void HandleSyntaxTree(SyntaxTreeAnalysisContext context)
    {
        vart root = context.Tree.GetCompilationUnitRoot(context.CancellationToken);
        string filePath = context.Tree.FilePath;

        GetGitCurrentBranchName(filePath); //**** Calls Git ****

        if (!availableHashBasedDescriptionOfCurrentlyEditedFile)
        {                
            ExportFileFromGitRepoToTemporaryLocation(filePath); //**** Calls Git ****
            CreateHashBasedDescriptionOfCurrentlyEditedFile();
        }

        var declarationNodes = GetSpecifiedDeclarationNodesFromSyntaxRoot(root);

        foreach (var node in declarationNodes )
        {
            if (!NodeDiffersFromGitRepo(node)) continue;
            if (NodeContainsRequiredTagInComment(node)) continue;

            FindTokenAndReportDiagnostics(context, node);
        }
    }

您能描述一下您的端到端场景吗?这将使提供更好的建议变得更容易。@JasonMalinowski:我已经添加了HandleSyntaxTree()方法的psedo代码-这足够了吗?啊,所以你正在尝试构建某些更改需要额外注释的地方,比如顶部的“更改历史”注释?你能描述一下你的端到端场景吗?这将使提供更好的建议变得更容易。@JasonMalinowski:我已经添加了HandleSyntaxTree()方法的psedo代码-这足够了吗?啊,所以您试图构建某些更改需要额外注释的地方,比如顶部的“更改历史”注释?