繁体   English   中英

msbuild.exe 有效,但 msbuild API 无效

[英]msbuild.exe works but msbuild API does not

我想使用 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;
}

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

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

我得到的错误:

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

知道如何克服这个错误吗? 为什么会发生这种情况?

有一个类似的问题,但另一个错误消息。 我的 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>

我设法通过引用 Microsoft.Build.Framework v14.0 解决了这个问题,其他 Microsoft.Build dll 是 v12.0。 现在它起作用了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM