如何从VisualStudioWorkspace获得工作空间

本文关键字:工作 空间 VisualStudioWorkspace | 更新日期: 2023-09-27 18:08:22

我正试图从visual studio获得工作区与roslyn一起使用。

我找到了一些关于这个的话题,比如这个:如何获得'Roslyn'来自IVsSolution的工作区对象?

我写了完全相同的代码:

var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();

但是我得到这个错误…

"没有找到匹配约束:ContractName的导出Microsoft.CodeAnalysis.Workspace RequiredTypeIdentityMicrosoft.CodeAnalysis.Workspace "

我不太明白是什么问题

如何从VisualStudioWorkspace获得工作空间

听起来Roslyn语言服务并没有在Visual Studio的实验版本中运行。你必须从这里下载最终用户预览版:http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx

这包括一个叫做"安装Roslyn预览到Roslyn实验蜂巢"的程序,你必须运行。

你正在运行的vsppackage必须有命令行参数"/rootSuffix Roslyn"。你可以通过在解决方案资源管理器中右键单击项目,单击属性并导航到"Debug"来设置它。

最后,必须在.csproj XML文件中包含一个额外的属性:

<VSSDKTargetPlatformRegRootSuffix>Roslyn</VSSDKTargetPlatformRegRootSuffix>

在我之前的问题中有一个解释:Attach VsPackage to Roslyn Instance

问题解决

我的问题来自组装之间的冲突。

在我的项目中,有Roslyn汇编版本0.7.0,但在测试期间,在运行时,它是Roslyn版本0.6.0。

所以在Visual Studio/rootSuffix Roslyn与<VSSDKTargetPlatformRegRootSuffix>Roslyn</VSSDKTargetPlatformRegRootSuffix>在每个项目中使用Roslyn。