使用msbuildworkspace打开解决方案会在没有详细信息的情况下发出诊断错

时间:2017-03-25 06:06:29

标签: c# msbuild roslyn roslyn-code-analysis

我正在尝试使用MSBuildWorkspace分析Roslyn的解决方案。 该解决方案是一个新的解决方案,其中包含2个类库项目,一个引用另一个。

它们是在Visual Studio 2017中创建的.Net 4.6.2。

当我打开解决方案时,我在workspace.Diagnostics中收到两个通用错误,两者都是: 处理文件' PathToProject '时Msbuild失败 诊断或输出窗口中没有其他内容可用于指示无法处理项目文件的原因。

打开解决方案的代码:

namespace RoslynAnalyse
    {
    class Program
    {
        static void Main(string[] args)
        {
            LocalAnalysis();
        }

        private static void LocalAnalysis()
        {
            var workspace = MSBuildWorkspace.Create();
            var solution = workspace.OpenSolutionAsync(@"D:\Code\Roslyn\RoslynAnalyse\SolutionToAnalyse\SolutionToAnalyse.sln").Result;
            var workspaceDiagnostics = workspace.Diagnostics;

        }
    }
}

Microsoft.CodeAnalysis的版本是2.0.0.0。 有谁知道MSBuild失败的原因,我如何获得更多信息?

1 个答案:

答案 0 :(得分:4)

当MSBuildWorkspace无法以这种方式打开项目或解决方案时,几乎总是因为使用MSBuildWorkspace的应用程序不包含msbuild.exe.config中包含的相同绑定重定向。

MSBuild使用绑定重定向来允许任务(通常已使用可能不同版本的msbuild API库编译C#代码)全部使用当前的msbuild API。否则,msbuild会导致运行时加载失败。

解决方案是将app.config文件添加到项目中,并将绑定重定向(msbuild.exe.config文件的assemblyBinding部分)复制到您的文件中。