在实时分析中自定义 Roslyn 代码分析器 运行 的具体要求?

Specific Requirements for custom Roslyn Code Analyzer to run in live analysis?

我有一个基于 Roslyn 的代码分析器和 Codefix。当直接从 AnalyzerCodeBlock 创建 ReportDiagnostic 时,它们会出现在实时分析中(Jetbrains Rider 中的问题)。

但是,它需要从解决方案中解析额外的数据来构建依赖树来做出决定。所以现在它是这样工作的:


RegisterCompilationStartAction -> then it registers a RegisterCodeBlockStartAction to build a dependency tree

RegisterOperationAction -> Instead of generating the ReportDiagnostic directly, it puts the particular calls into a ConcurrentBag to analyze later.

RegisterCompilationEndAction -> When called, this analyzes the calls from RegisterOperationAction with the dependency tree generated in the RegisterCodeBlockStartAction and generates ReportDiagnostics with the combined information.

现在它只适用于构建,不适用于实时分析。我很想让它在实时分析中恢复工作(我启用了解决方案范围的分析),因为允许使用代码修复非常有用。

任何已知原因的想法(比如使用任何 CompilationStart-End)这在实时模式下自动不起作用,或者有没有办法将其重构为与实时分析兼容的不同结构?

CompilationStart 不是问题。它不会导致分析器成为 build-only。但是,CompilationEnd 是问题所在。它们只是构建,并且它们的相关代码修复不会显示在 IDE 中。这是出于性能原因。

相关讨论:https://github.com/dotnet/roslyn/issues/51653