Visual Studio 2015扩展 - 如何获取当前解决方案

时间:2015-04-22 11:21:03

标签: visual-studio

我正在开发Visual Studio 2015的扩展。如何获取IDE中加载的当前解决方案的工作区对象,以便我的扩展可以使用它?

许多示例似乎都加载了一个项目或解决方案,但是,我希望在IDE中加载解决方案的工作区,以便我的扩展程序可以访问它。

Dim workspace = New AdhocWorkspace()
Dim solution  = workspace.CurrentSolution
Dim project   = solution.AddProject("projectName", "assemblyName", LanguageNames.VisualBasic)
Dim document = project.AddDocument("name.vb", "...some code")

1 个答案:

答案 0 :(得分:2)

Roslyn定义了几种类型的工作空间,但您感兴趣的是VisualStudioWorkspace。

您可以通过MEF从vsix的构造函数中获取它:

[ImportingConstructor]
public Ctor([Import(typeof(SVsServiceProvider), AllowDefault = true)] IServiceProvider vsServiceProvider, [Import(typeof(VisualStudioWorkspace), AllowDefault = true)] Workspace vsWorkspace)

或使用组件服务:

IComponentModel componentModel = this.serviceProvider.GetService(typeof(SComponentModel)) as IComponentModel;
var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();

您可能会发现this questionthis question也很有用。