【问题标题】:Building WPF application using Microsoft.Build assemblies使用 Microsoft.Build 程序集构建 WPF 应用程序
【发布时间】:2015-08-26 13:47:58
【问题描述】:

我正在尝试使用 Microsoft.Build 程序集在 WPF (.Net Framework 4.0) 项目上执行构建,即不从 VS 构建,也不使用命令行中的标准 MSBuild 构建。我的所有项目都成功构建,但 WPF 项目失败并显示以下消息:

C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\Microsoft.WinFx.targets(268,9):错误 MSB4127:无法从程序集“PresentationBuildTasks,版本=4.0”实例化“MarkupCompilePass1”任务.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35"。请验证任务程序集是使用与您计算机上安装的相同版本的 Microsoft.Build.Framework 程序集构建的,并且您的主机应用程序没有缺少 Microsoft.Build.Framework 的绑定重定向。无法将“Microsoft.Build.Tasks.Windows.MarkupCompilePass1”类型的对象转换为“Microsoft.Build.Framework.ITask”类型。 [C:\Service\Test.csproj] C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\Microsoft.WinFx.targets(268,9):错误MSB4060:“MarkupCompilePass1”任务已声明或使用不正确,或在构建过程中失败。检查任务名称和程序集名称的拼写。

我找到了提到更新的 MSBuild 程序集(12.0 与 4.0)等的参考资料(在 Stack Overflow 上)。这一切都已更新,即来自构建实用程序的参考资料,但没有运气。

有什么想法/建议吗?

【问题讨论】:

    标签: wpf msbuild microsoft.build


    【解决方案1】:

    我们正在使用类似的系统,问题似乎源于页面标签的编译:<generator>MSBuild:Compile</generator>。这似乎以拉取 4.0 框架库的方式调用 MSBuild

    对于我们的构建可执行文件,我们只是修改了配置以包含 12.0 MSBuild 配置使用的配置。即,将C:\Program Files (x86)\MSBuild\12.0\bin\MSBuild.exe.config 中的元素放入您的应用程序配置中。这为我们解决了问题。

    【讨论】:

    • 我遇到了与 OP 完全相同的问题。您能否更具体地说明您的修改是什么?我能够找到您提到的配置文件以及 MSBuild:Compile 行,但我不确定如何合并这两个文件。
    • 哇,你拯救了我的一天。 @Brent 在我的例子中,“构建可执行文件”是一个带有 Web.config 的 ASP.NET 项目,它的部分看起来像“" - 在此部分下,将依赖程序集 xml 粘贴到 C:\Program Files (x86)\MSBuild\14.0\Bin
    • 谢谢@tofutim!这为我澄清了一些事情,我现在就开始工作了!
    • 其实是虚惊一场,我还是和以前一样的问题。我正试图让它与 Costura/Fody 一起使用。
    【解决方案2】:

    我找到了解决方案。将绑定重定向添加到您要在 App.config 中使用的版本:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      </startup>
      <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="15.1.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="Microsoft.Build.Framework" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
            <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="Microsoft.Build" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
            <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-30
      • 2012-02-11
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多