代码之家  ›  专栏  ›  技术社区  ›  doorman

奇怪的诊断错误,预输入类型系统…未定义或导入

  •  1
  • doorman  · 技术社区  · 6 年前

    我在解析一个非常基本的.NET4.6应用程序时遇到了RoslynDiagnostics错误。解决方案文件可以从那里下载 https://github.com/dotnet/roslyn/files/2393288/DemoSolution.zip

    BLL->分贝

    enter image description here

    解决方案和项目构建得很好,但Roslyn仍然给出了这些错误。也许错误是误导性的,我需要以某种方式配置项目?你知道我怎么解决这些错误吗?

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

    var properties = new Dictionary<string, string>
                    {
                        ["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);
    
                                      }
                    }
    

    Msbuild在处理文件“MYPATH”时失败\BLL.csproj公司“与 消息:C:\Program Files(x86)\Microsoft Visual 工作室\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion版本.目标: (1656,5):“GetReferenceNearestTargetFrameworkTask”任务无法启动 视觉 请验证任务程序集是否已使用相同版本生成 计算机和主机应用程序不缺少绑定 重定向到Microsoft.Build.Framework. 无法强制转换类型的对象 'NuGet.Build.Tasks任务.GetReferenceNearestTargetFrameworkTask'以键入 'Microsoft.Build.Framework“伊塔斯克”。C:\程序文件(x86)\Microsoft 工作室\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion版本.目标: 声明或使用不当,或在施工过程中失败。检查

    1 回复  |  直到 6 年前
        1
  •  1
  •   doorman    6 年前

    所以这最终解决了问题:

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

    2. 清除了Microsoft.Build版本*从output bin文件夹

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

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

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