如何从VisualStudioWorkspace获取工作区?

时间:2014-06-13 07:42:03

标签: c# roslyn

我试图让Visual Studio的Workspace与roslyn一起使用。

我找到了一些关于此的主题,如下所示: How to get reference to 'Roslyn' Workspace object from IVsSolution?

我写了完全相同的代码:

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

但是我得到了这个错误...

  

&#34;未找到与约束匹配的导出:ContractName   Microsoft.CodeAnalysis.Workspace RequiredTypeIdentity   Microsoft.CodeAnalysis.Workspace&#34;

我真的不明白这个问题是什么。

2 个答案:

答案 0 :(得分:0)

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

其中包括一个名为“将Roslyn预览安装到Roslyn实验蜂巢中”的程序,您必须运行该程序。

您正在运行的VSPackage必须具有命令行参数“/ rootSuffix Roslyn”。您可以通过在解决方案资源管理器中右键单击项目,单击属性并导航到“调试”来设置此项。

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

<VSSDKTargetPlatformRegRootSuffix>Roslyn</VSSDKTargetPlatformRegRootSuffix>

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

答案 1 :(得分:0)

问题解决了。

我的问题来自于集会之间的冲突。

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

所以在Visual Studio / rootSuffix Roslyn中 使用Roslyn在每个项目中使用<VSSDKTargetPlatformRegRootSuffix>Roslyn</VSSDKTargetPlatformRegRootSuffix>。 一切都好。