Roslyn 分析器 - 访问 ITextBuffer

Roslyn Analyzer - Access to ITextBuffer

是否有可能以某种方式访问​​ Visual Studio 中 Roslyn 诊断分析器正在分析的文档的 ITextBuffer 实例。或者至少是文件名,以便我可以自己检索 ITextBuffer?

有关如何为 c# 编写自定义代码分析器的详细信息,请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix

一般来说,围绕分析器创建的基础设施允许它们 运行 在 Visual Studio 之外(例如,从命令行或作为 CI 构建系统的一部分)。这就是为什么没有很多简单的方法可以在 Roslyn 和 Visual Studio 之间进行互操作。然而,有一些不同的 extension methods 可以帮助您弥合 Visual Studio 和 Roslyn 之间的差距。

我相信你需要:

  1. 添加带有 Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text
  2. 的 NugetPackage
  3. 将 using using Microsoft.CodeAnalysis.Text; 添加到您的分析器

如果您有权访问 Document,则可以使用 .TryGetText(out SourceText) 检索文档的 SourceText

然后你可以使用扩展方法FindCorrespondingEditorTextSnapshot得到一个ITextSnapshot.

我在这里的知识有点不稳定,但我不确定你是否可以获得 ITextBuffer,因为当没有为给定文件打开编辑器时,你的分析器通常会 运行ning 所以没有为它创建 ITextBuffer

SyntaxTree 有一个 属性 FilePath,Document 也有,如果不是空字符串,它将是文件的路径。

不知道如何从那里转到缓冲区。但也不清楚为什么你会想要缓冲区...