我正在尝试编写一个Visual Studio扩展,它将分析编辑器中显示的C#代码,并可能根据我找到的内容更新代码。这将是按需(通过菜单项),而不是使用分析器和代码修复。
互联网上有许多示例和示例,但它们都是从样本中硬编码的源代码开始,或者创建新文档,或查看打开的VS解决方案中的每个文件。如何从活动编辑器窗口访问源代码?
答案 0 :(得分:0)
首先,您需要安装Microsoft.CodeAnalysis.EditorFeatures.Text
包。
然后你需要添加适当的using语句:
using Microsoft.CodeAnalysis.Text;
现在,您可以使用此处的扩展方法在Visual Studio概念(ITextSnapshot
,ITextBuffer
等)和Roslyn概念(Document
,SourceText
等)之间进行映射:http://source.roslyn.io/#Microsoft.CodeAnalysis.EditorFeatures.Text/Extensions.cs
例如:
ITextSnapshot snapshot = ... //Get this from Visual Studio
var documents = snapshot.GetRelatedDocuments(); //There may be more than one
答案 1 :(得分:0)
在对原始问题的评论中,@ SJP在Calling Roslyn from VSIX Command给出了@Frank Bakker回答问题的链接。这确实有效。
var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
var textManager = (IVsTextManager)Package.GetGlobalService(typeof(SVsTextManager));
IVsTextView activeView = null;
ErrorHandler.ThrowOnFailure(textManager.GetActiveView(1, null, out activeView));
var editorAdapter = componentModel.GetService<IVsEditorAdaptersFactoryService>();
var textView = editorAdapter.GetWpfTextView(activeView);
var document = Extensions.GetRelatedDocuments(textView.TextBuffer).FirstOrDefault();
在上述@ user1912383代码之后的评论中,@ kman提到这不适用于.sql文件等文档类型。但它确实适用于我将使用的.cs文件。