2017-07-17 46 views
1

我正在尝试为vs2017构建VSIX包以使自定义工具可用。 我现在面临的问题是,我无法在调试时获取当前工作区。 下面的代码用于获取工作区:VSIX项目:由于投射问题而无法获取当前工作区

var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel)); 
     var workspace = (Workspace)componentModel.GetService<VisualStudioWorkspace>(); 

在代码的第二线引发的错误是“无法转换类型的对象‘Microsoft.VisualStudio.LanguageServices.RoslynVisualStudioWorkspace’为类型“Microsoft.VisualStudio .LanguageServices.VisualStudioWorkspace”。“

我已经将languageservices-package添加到项目中,如其他主题上的建议。

回答

2

如果您加载了两个不同版本的Roslyn DLL,可能会发生这种情况(您可以在Debug,Modules中检查该版本)。

确保VSIX项目中对Roslyn的引用未设置为“复制本地”或包含在VSIX中。

+0

现在我正在接近这个问题。在我见过的模块中,Microsoft.CodeAnalysis.Workspaces被加载了2次,所以我从输出中排除了vsix中的引用。 –

+0

“无法加载文件或程序集'Microsoft.CodeAnalysis.Workspaces,版本2.3.0.0'....”我可以使用程序集重定向工作吗?我看到程序集已经加载,只是在一个不同的版本 –

+0

@ D.J .:听起来你引用的是比VS版本更新的Roslyn版本。升级VS或降级Roslyn。 – SLaks

相关问题