Roslyn 分析器 运行 不够频繁

Roslyn Analyzers do not run often enough

我正在编写我的第一个 Roslyn 分析器。我基本上已经按照教程 https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/special-issue/csharp-and-visual-basic-use-roslyn-to-write-a-live-code-analyzer-for-your-api , and then proceeded by adding a second analyzer class which should be language-agnostics analysis, similar to what presented in https://www.meziantou.net/writing-a-language-agnostic-roslyn-analyzer-using-ioperation.htm .

所以,我有一个分析器class,它用

初始化自己
context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.NamedType);

第二个使用

context.RegisterOperationAction(AnalyzeConversionOperation, OperationKind.Conversion);
context.RegisterOperationAction(AnalyzeInvocationOperation, OperationKind.Invocation);

为了测试我的分析器,我将生成的 .Vsix 项目设置为启动项目,然后按 F5,它让我进入一个单独的 Visual Studio 实例,我在其中编写了一些代码并想看看是否我的分析仪按预期工作。而且,我在我的分析器操作的开头设置了断点 - AnalyzeSymbol、AnalyzeConversionOperation 和 AnalyzeInvocationOperation,在原始 VS 实例中。

分析器操作也没有像我期望的那样被调用。实际上,在我编写要分析的代码时,它们根本没有被调用。只有当我将光标放在某个类型名称上(与 SymbolKind.NamedType 操作相关)时, 我点击出现的灯泡,我接到电话 - 而不是仅针对 AnalyzeSymbol 操作,但代码中的各种操作也会根据需要调用 AnalyzeConversionOperation 和 AnalyzeInvocationOperation。

因此,被调用的操作都很好 - 但它们没有在我需要时被调用。我希望它们在需要时被调用——基本上,在我编辑代码时几乎是连续的。或者至少在构建时,或者一些明确的“立即分析”命令。但我不知道有什么相似之处。我发现触发它们的唯一方法就是我描述的方式。这对我来说似乎不正确。

我尝试使用谷歌搜索但找不到解决方案;或者我可能有一些误解,它应该以不同的方式工作?

分析器 运行 不在进程中。所以我认为你不会遇到断点,但实际上这些行会被命中。

您有三个选择:

  • 禁用 运行ning 分析器 out-of-process。

  • ServiceHub.RoslynCodeAnalysisService 进程附加到调试器。

  • 通过单元测试调试。这是我的首选方法。