是否可以以某种方式访问Visual Studio中Roslyn诊断分析器正在分析的文档的ITextBuffer实例。或者至少是文件名,以便我自己可以检索ITextBuffer?
有关如何为c#编写自定义代码分析器的更多信息,请参见:https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix
答案 0 :(得分:2)
SyntaxTree和File一样,都具有FilePath属性,如果不是空字符串,则它是文件的路径。
不知道如何从缓冲区跳转到缓冲区。但是也不清楚为什么要缓冲区...
答案 1 :(得分:1)
通常,创建分析器周围的基础结构是为了允许它们在Visual Studio外部运行(例如,从命令行或作为CI构建系统的一部分)。这就是为什么在Roslyn和Visual Studio之间没有很多简单的方法可以互操作的原因。但是,有几种extension methods可以帮助您缩小Visual Studio和Roslyn之间的差距。
我相信您需要:
Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text
添加NugetPackage using Microsoft.CodeAnalysis.Text;
添加到分析仪中如果您有权访问Document
,则可以使用.TryGetText(out SourceText)
来检索文档的SourceText
。
然后,您可以使用扩展方法FindCorrespondingEditorTextSnapshot
来获得ITextSnapshot
。
我的知识有点动摇,但是我不确定是否可以得到ITextBuffer
,因为当没有打开给定文件的编辑器时,分析器通常会运行,因此ITextBuffer
没有打开为此创建的。