【发布时间】:2015-06-27 00:31:43
【问题描述】:
我在尝试编写一段代码分析然后通过 MSBuild 任务运行它时遇到了这个奇怪的问题。当我使用 MSBuild 运行时,我使用 MSBuildWorkspace.Create 来创建工作区。但是,此方法仅在运行 .net Framework 目录中的 MSBuild 版本时才有效,而 v12 (2013) 和 v14 (2015) 都崩溃了。
见下文
[TestMethod]
public void RunThroughMsBuild()
{
RunMsBuild(@"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe");//Succeeds
RunMsBuild(@"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe");//Fails
RunMsBuild(@"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe");//Fails
}
private static void RunMsBuild(string msbuildLocation)
{
var process = Process.Start(new ProcessStartInfo(msbuildLocation, ProjectFileLocation)
{
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true
});
Debug.Write(process.StandardOutput.ReadToEnd());
process.WaitForExit();
Assert.IsTrue(process.HasExited);
Assert.AreEqual(0, process.ExitCode);
}
我得到的错误更奇怪:
- [0] {“来自程序集“Microsoft.CodeAnalysis.Workspaces,版本=1.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”的“Microsoft.CodeAnalysis.AssemblyReferenceResolver”类型中的方法“ResolveReference”没有实现。 ":"Microsoft.CodeAnalysis.AssemblyReferenceResolver"} System.Exception {System.TypeLoadException}
- [1] {“方法 'get_Locations' 中的类型 'Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationArrayTypeSymbol' 来自程序集 'Microsoft.CodeAnalysis.Workspaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 没有实施。":"Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationArrayTypeSymbol"} System.Exception {System.TypeLoadException}
还有 16 个……
抛出这个异常的代码很简单:
var workspace = MSBuildWorkspace.Create();
【问题讨论】:
标签: c# .net msbuild roslyn msbuild-task