我有一个VS Package项目,我需要从该项目访问加载的IVsSolution中的Roslyn或Microsoft.CodeAnalysis的Workspace或Solution对象。
我需要知道我如何才能做到这一点?
我在这里发现了这个stackoverflow讨论,它建议使用Workspace类的PrimaryWorkspace静态属性,这是我在Microsoft.CodeAnalysis.Workspace 中找不到的
编辑:我发现Microsoft.CodeAnalysis还没有这个,但我从Nuget.org下载了Roslyn的旧版本,它有这个。但现在PrimaryWorkspace属性给了我NULL:(我使用的是Isolated Shell。
VisualStudioWorkspace
通过MEF导出。如果你已经在包中使用MEF,你可以只使用[Import]
。
如果没有,您可以为SComponentModel
服务QueryService()
,然后从中获取VisualStudioWorkspace
。
在VSPackage的Initialize((函数中,您可以使用以下内容:
var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();
我相信您还需要添加一个额外的参考:Microsoft.VisualStudio.LanguageServices.dll
正如@Vizu所指出的,你现在可以通过NuGet:添加它
Install-Package Microsoft.VisualStudio.LanguageServices