关于c#:Roslyn分析器-访问ITextBuffer

Roslyn Analyzer - Access to ITextBuffer

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

有关如何为c#编写自定义代码分析器的更多信息,请参见:https://docs.microsoft.com/zh-cn/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer- 代码修复


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

不知道如何从那里去缓冲区。但是也不清楚为什么要缓冲区...


通常,创建分析器周围的基础结构是为了允许它们在Visual Studio外部运行(例如,从命令行或作为CI构建系统的一部分)。这就是为什么在Roslyn和Visual Studio之间没有很多简单的方法可以互操作的原因。但是,有几种不同的扩展方法可以帮助您缩小Visual Studio和Roslyn之间的差距。

我相信您需要:

  • Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text添加NugetPackage
  • 将using using Microsoft.CodeAnalysis.Text;添加到分析仪
  • 如果可以访问Document,则可以使用.TryGetText(out SourceText)检索文档的SourceText

    然后,您可以使用扩展方法FindCorrespondingEditorTextSnapshot获得ITextSnapshot

    我的知识有点动摇,但是我不确定是否可以获取ITextBuffer,因为当没有打开给定文件的编辑器时,分析器通常会运行,因此没有为其创建ITextBuffer