使用 Microsoft.VisualStudio.LanguageServices 加载项目会引发 System.ArgumentNullException for Visual Studio 2017

Loading projects using Microsoft.VisualStudio.LanguageServices throws System.ArgumentNullException for Visual Studio 2017

我正在尝试使用 Microsoft.VisualStuio.LanguageServices 枚举解决方案的所有项目。 这对于 VisualStudio 2019 工作正常,但在 VisualStudio 2017 上失败。 我的代码如下-

var workspace= ComponentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>(); 
var projects = workspace.CurrentSolution.Projects;        

我在第二行遇到异常 -

System.ArgumentNullException: 'Value cannot be null. Parameter name: source'

它显示了正在调试的项目列表。 我使用的是 2.10.0.0 版本的 Microsoft.VisualStudio.LanguageServices.dll,它与 VS 模块中加载的 dll 相同。 是组装问题吗?我该如何解决这个问题?

此问题是由于引用的 dll 和 VS2017 的 dll 之间 Microsoft.CodeAnalysis 的版本不匹配造成的。

在模块window中可以清楚地看到,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。