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