我正在开发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")
答案 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 question和this question也很有用。