使用带有最新microsoft.build.dll,v12.0.0.0的buildManager时构建失败

时间:2016-07-20 14:23:22

标签: .net c#-4.0 msbuild microsoft.build buildmanager

我在构建工具中更新了程序集引用,以使用microsoft.build,microsoft.build.engine和microsoft.build.framework的最新版本(v12)。但是在使用BuildManager编译项目时(我使用Rebuild选项进行编译),它在Target:CleanWebsitesPackageCore上失败,错误为MSB4127:“无法从程序集”C:\ Program Files(x86)中实例化“CheckPathAttributes”任务)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll“。请验证任务程序集是使用与安装的Microsoft.Build.Framework程序集相同的版本构建的您的计算机以及您的主机应用程序没有错过Microsoft.Build.Framework的绑定重定向。无法将类型为“Microsoft.Web.Publishing.Tasks.CheckPathAttributes”的对象转换为“Microsoft.Build.Framework.ITask”。

需要注意的是,如果我尝试通过从命令提示符调用MSBuild.exe直接编译项目,那么它编译得很好。在查看日志时,我可以看到目标“CleanWebsitesPackageCore”在“干净”部分期间从未被调用过。想知道为什么在使用buildmanager时调用目标而不是在命令提示符下直接调用msbuild.exe?

任何人都知道为什么会这样发生。提前谢谢。

1 个答案:

答案 0 :(得分:4)

参考解决方案:http://blogs.microsoft.co.il/idof/2008/11/24/what-does-entity-framework-has-to-do-with-msbuild/

App.config添加此dependentAssembly

  <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="12.0.0.0"/>
    </dependentAssembly>
    </assemblyBinding>
  </runtime>