Roslyn Analyzer-访问ITextBuffer

时间:2019-06-20 13:30:59

标签: c# roslyn roslyn-code-analysis

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

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

2 个答案:

答案 0 :(得分:2)

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

不知道如何从缓冲区跳转到缓冲区。但是也不清楚为什么要缓冲区...

答案 1 :(得分:1)

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

我相信您需要:

  1. 使用Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text添加NugetPackage
  2. 将使用using Microsoft.CodeAnalysis.Text;添加到分析仪中

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

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

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