如何从IVsSolution获取对'Roslyn'工作区对象的引用?



我有一个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

最新更新