未定义或导入奇怪的诊断错误,预定义类型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”任务已被声明或使用不正确,或者施工期间失败。 检查任务名称和程序集名称的拼写。
所以这最终解决了它:
-
添加了@GeorgeAlexandria建议的microsoft.build重定向http://github.com/Microsoft/msbuild/issues/2369#issuecomment-353674937
-
从输出bin文件夹中清除Microsoft.Build。*
-
添加了Microsoft.Build.Locator作为参考
-
在工作区代码上方添加了行MSBuildLocator.RegisterDefaults()。
资料来源: https : //github.com/dotnet/roslyn/issues/26029#issuecomment-380164421