问题描述
我正在尝试使用 Microsoft.VisualStuio.LanguageServices 枚举解决方案的所有项目。 这对于 VisualStudio 2019 工作正常,但在 VisualStudio 2017 上失败。 我的代码如下-
var workspace= ComponentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();
var projects = workspace.CurrentSolution.Projects;
我在第二行遇到异常 -
System.ArgumentNullException: '值不能为空。参数名称:source'
它显示了调试项目列表。 我正在使用 2.10.0.0 版本的 Microsoft.VisualStudio.LanguageServices.dll,它与 VS 模块中加载的 dll 相同。 是组装问题吗?我该如何解决这个问题?
解决方法
发生此问题是由于引用的 dll 和 VS2017 的 dll 之间的 Microsoft.CodeAnalysis 版本不匹配。
在模块窗口中可以清楚地看到,VS使用的是Microsoft.VisualStudio.LanguageServices 2.10.0.0,因此我保留了相同版本的引用dll。
在此声明中-
var workspace= componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();
工作区的类型为 Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace。
但是当我们这样做时 - var projects = workspace.CurrentSolution.Projects;
变量'projects'的类型是IEnumerable
我想,这就是调试值在快速观察中可用但执行失败的原因。
解决方案 - 引用与 VS 引用的版本相同的 dll。