使用 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。
我正在尝试使用 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。