尽管能够导航到定义,但命名空间 'Microsoft.CodeAnalysis' 中不存在类型或命名空间 'MSBuild'

Type or namespace 'MSBuild' does not exist in namespace 'Microsoft.CodeAnalysis' despite being able to navigate to definition

我是第一次尝试 Roslyn,我正在编写一小段代码来通读一个项目,classes 和 class 成员。

我正在使用 MSBuildWorkspace class 创建 Roslyn 工作区 (MSBuildWorkspace.Create())。下面是我写的一小部分代码

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.MSBuild;    //Some problem in this line? Read on.

...
...

var workspace = MSBuildWorkspace.Create();
Solution solutionToAnalyze =
                workspace.OpenSolutionAsync(pathToSolution).Result;
IEnumerable<Project> projectsToAnalyze =
                solutionToAnalyze.Projects;
...
...

当我在 MSBuildWorkspace class 上执行 "Go to Definition" 时,我能够导航到 class 的定义并且我可以清楚地看到它的命名空间是 Microsoft.CodeAnalysis.MSBuild(见下图)。

但尽管如此,我还是不断收到错误消息,"The type or namespace MSBuild doesn't exist in the namespace 'Microsoft.CodeAnalysis' at the using statement that I've highlighted with the comment"。我似乎无法理解此错误背后的原因。我错过了什么吗?

感谢@CZabransky 提供的link,我找到了答案。

基本上我忽略了我收到的以下警告。 (人们不应该忽视警告的另一个原因!o_O)

我的项目以 Framework 4.5 版为目标,因此该程序集不是构建的,因为它是针对 v4.5.2 版本构建的。我必须将框架版本定位到 4.6 并成功构建解决方案。

希望对您有所帮助!

您需要添加对来自 Nuget 包 Microsoft.CodeAnalysis.Workspaces.MSBuildMicrosoft.CodeAnalysis.Workspaces.MSBuild.dll 的引用。