我正在尝试在WPF()上执行构建。. Net Framework 4.0)项目。构建程序集,即不是从VS构建,也不是从命令行使用标准的MSBuild构建。我的所有项目都成功构建,但WPF项目失败,并显示以下消息:
C:WINDOWSMicrosoft.NETFramework64v4.0.30319Microsoft.WinFx.targets(268,9):错误MSB4127:"MarkupCompilePass1"任务无法从程序集"PresentationBuildTasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"实例化。请验证任务程序集已使用与计算机上安装的Microsoft.Build.Framework程序集相同的版本构建,并且您的主机应用程序没有丢失Microsoft.Build.Framework的绑定重定向。无法强制转换类型为"Microsoft.Build.Tasks.Windows"的对象。MarkupCompilePass1'输入'Microsoft.Build.Framework.ITask'。(C: Test.csproj服务)C:WINDOWSMicrosoft.NETFramework64v4.0.30319Microsoft.WinFx.targets(268,9):错误MSB4060:"MarkupCompilePass1"任务声明或使用不正确,或在构建期间失败。检查任务名称和程序集名称的拼写。
我发现引用(Stack Overflow)提到更新的MSBuild程序集(12.0 vs 4.0)等。这些都已更新,即来自构建实用程序的引用,但运气不好。
意见/建议吗?
我们正在使用一个类似的系统,问题似乎源于Page标签的编译:<generator>MSBuild:Compile</generator>
。这似乎是以拉4.0框架库的方式调用MSBuild。
对于我们的构建可执行文件,我们简单地修改了配置,以包含12.0 MSBuild配置使用的配置。也就是说,将C:Program Files (x86)MSBuild12.0binMSBuild.exe.config
中的元素放在您的应用程序配置中。这为我们解决了问题。
我找到了一个解决方案。在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>