使用Microsoft.Build程序集构建WPF应用程序

时间:2015-08-26 13:47:59

标签: wpf msbuild microsoft.build

我正在尝试使用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,Version = 4.0”实例化“MarkupCompilePass1”任务.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35“。请验证是否使用与计算机上安装的Microsoft.Build.Framework程序集相同的Microsoft.Build.Framework程序集版本构建了任务程序集,并确保主机应用程序没有缺少Microsoft.Build.Framework的绑定重定向。无法将类型为“Microsoft.Build.Tasks.Windows.MarkupCompilePass1”的对象强制转换为“Microsoft.Build.Framework.ITask”。 [C:\服务\ Test.csproj]     C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.WinFx.targets(268,9):错误MSB4060:“MarkupCompilePass1”任务已声明或使用不正确,或在构造期间失败。检查任务名称和程序集名称的拼写。

我找到了引用(在Stack Overflow上)提到更新的MSBuild程序集(12.0 vs 4.0)等等。这些都已更新,即来自构建实用程序的引用,但没有运气。

有任何想法/建议吗?

2 个答案:

答案 0 :(得分:3)

我们正在使用类似的系统,问题似乎源于页面标记的编译:{{1​​}}。这似乎是以一种拉动4.0框架库的方式调用 MSBuild

对于我们的构建可执行文件,我们只是修改了配置以包含 12.0 MSBuild 配置使用的配置。即,获取<generator>MSBuild:Compile</generator>中的元素并将它们放在应用程序配置中。这解决了我们的问题。

答案 1 :(得分: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>