如何参考Roslyn' IVsSolution的工作区对象?

时间:2014-05-10 07:36:03

标签: roslyn vspackage

我有一个VS Package项目,我需要从中访问Roslyn或Microsoft.CodeAnalysis'加载的IVsSolution

中的Workspace OR Solution对象

我需要知道如何实现这一目标?

我发现this stackoverflow discussion here建议使用Workspace类的PrimaryWorkspace静态属性,但我无法在Microsoft.CodeAnalysis.Workspace

中找到

编辑: 我发现Microsoft.CodeAnalysis还没有这个,但是我下载了older release of Roslyn from Nuget.org这个。但是现在PrimaryWorkspace Property给了我NULL :(我正在使用Isolated Shell。

2 个答案:

答案 0 :(得分:3)

VisualStudioWorkspace通过MEF导出。如果您已在包装中使用MEF,则可以[Import]

如果没有,您可以QueryService()获取SComponentModel服务,然后从中获取VisualStudioWorkspace

答案 1 :(得分:3)

在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