msbuild.exe有效,但msbuild API没有

Nmk*_*nas 2 c# msbuild visual-studio

我想使用MSBuild API自动化我的构建,但它给了我一个错误.我在Visual Studio 2015中有自动化项目.它引用了MSBuild v12.0 dll.

代码我用来构建解决方案:

private bool Execute()
{
    var buildProperties = new Dictionary<string, string>();
    buildProperties["Configuration"] = "Debug";
    var solution = @"C:\test\test.sln";
    bool success = Build(solution, buildProperties)
    return success;
}

private bool Build(string solution, Dictionary<string, string> buildProperties)
{
    Guard.ValidPath(solution, nameof(solution));
    BuildParameters buildParam = new BuildParameters()

    BuildRequestData buildRequest = new BuildRequestData(solution, buildProperties, null, new string[] { "Build" }, null);
    BuildResult buildResult = BuildManager.DefaultBuildManager.Build(buildParam, buildRequest);
    if (buildResult.OverallResult == BuildResultCode.Success)
        return true;

    return false;
}
Run Code Online (Sandbox Code Playgroud)

该解决方案有一个项目.它的配置:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
etc.
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

:错误C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Data.Entity.targets(65,5):无法从程序集"C:\ Windows\Microsoft"实例化"EntityDeploySplit"任务. NET \框架\ v4.0.30319\Microsoft.Data.Entity.Build.Tasks.dll".请验证是否使用与计算机上安装的Microsoft.Build.Framework程序集相同的Microsoft.Build.Framework程序集版本构建了任务程序集,并确保主机应用程序没有缺少Microsoft.Build.Framework的绑定重定向.无法将"Microsoft.Data.Entity.Build.Tasks.EntityDeploySplit"类型的对象强制转换为"Microsoft.Build.Framework.ITask"

知道如何克服这个错误吗?为什么会这样?

小智 5

有一个类似的问题,但另一个错误消息.我的Web项目无法构建,因为他们试图将他们的任务转发给Microsoft.Build.Framework.ITask.我认为问题是他们使用的是旧版本,因此无法投射到新版本的ITask.为MSBuild 3.5找到了这个解决方案,它也适用于14.0.

MSDN论坛:MSBuild崩溃与"消息"任务无法实例化异常

我将3.5更改为14.0并将其添加到我的app.config:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="14.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)