未定义或导入奇怪的诊断错误,预定义类型System ….

解析一个非常基本的.NET 4.6应用程序时,我得到Roslyn诊断错误。 解决方案文件可以从那里下载https://github.com/dotnet/roslyn/files/2393288/DemoSolution.zip

依赖树看起来像这样:

BLL – > DB

我在BLL项目中遇到以下诊断错误:

在此处输入图像描述

Roslyn解决方案和项目构建正常,但仍然存在这些错误。 也许错误是误导性的,我需要在某种程度上配置项目? 知道如何解决这些错误吗?

以下是用于解析文件的代码:

var properties = new Dictionary { ["DesignTimeBuild"] = "true", ["CheckForSystemRuntimeDependency"] = "true" }; var workspace = MSBuildWorkspace.Create(properties); workspace.WorkspaceFailed += (sender, args) => { }; workspace.LoadMetadataForReferencedProjects = true; Solution solution = workspace.OpenSolutionAsync(SolutionFilePath).Result; foreach (var p in solution.Projects) { foreach (var file in p.Documents) { var semanticModel = file.GetSemanticModelAsync().Result; var mscorlib = MetadataReference.CreateFromFile(file.FilePath); var compilation = CSharpCompilation.Create("MyCompilation", new[] { semanticModel.SyntaxTree }, new[] { mscorlib }); var model = compilation.GetSemanticModel(semanticModel.SyntaxTree); var declarationDiagnistics = model.Compilation.GetDeclarationDiagnostics(CancellationToken.None); var parseDiagnostics = model.Compilation.GetParseDiagnostics(CancellationToken.None); var allDiagnostics = model.Compilation.GetDiagnostics(CancellationToken.None); var methodBodyDiagnostics = model.Compilation.GetMethodBodyDiagnostics(CancellationToken.None); } } 

订阅workspace.workspaceFailed事件会导致以下错误:

使用以下消息处理文件’MYPATH \ BLL.csproj’时Msbuild失败:C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets:(1656, 5):无法从程序集“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ NuGet \ NuGet.Build.Tasks.dll”实例化“GetReferenceNearestTargetFrameworkTask”任务”。 请validation任务程序集是否已使用与计算机上安装的Microsoft.Build.Framework程序集相同的Microsoft.Build.Framework程序集构建,并且主机应用程序未缺少Microsoft.Build.Framework的绑定重定向。 无法将“NuGet.Build.Tasks.GetReferenceNearestTargetFrameworkTask”类型的对象强制转换为“Microsoft.Build.Framework.ITask”。 C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets:(1656,5):“GetReferenceNearestTargetFrameworkTask”任务已被声明或使用不正确,或者施工期间失败。 检查任务名称和程序集名称的拼写。

所以这最终解决了它:

  1. 添加了@GeorgeAlexandria建议的microsoft.build重定向http://github.com/Microsoft/msbuild/issues/2369#issuecomment-353674937

  2. 从输出bin文件夹中清除Microsoft.Build。*

  3. 添加了Microsoft.Build.Locator作为参考

  4. 在工作区代码上方添加了行MSBuildLocator.RegisterDefaults()。

资料来源: https : //github.com/dotnet/roslyn/issues/26029#issuecomment-380164421