【发布时间】:2016-07-20 14:23:22
【问题描述】:
我更新了构建工具中的程序集引用,以使用最新版本 (v12) 的 microsoft.build、microsoft.build.engine 和 microsoft.build.framework。但是,在使用 BuildManager 编译项目时(我使用 Rebuild 选项进行编译),它在目标处失败: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 时调用目标?
任何人都知道为什么会这样。提前致谢。
【问题讨论】:
-
周围的 MSBuild 版本太多。转换错误表示您引用了错误版本的 Microsoft.Build.Framework。在我的机器上它是版本 14 并存储在 GAC 中。
-
我已经从 c:\Program Files (x86)\MSBuild\12.0\bin 引用了 microsoft.build、microsoft.build.engine 和 microsoft.build.framework。所以在这不应该用 12.0 下的 MSBuild 编译吗?
-
那是第 12 版,而不是第 14 版,因此无法在我的机器上运行。考虑到结果,大概也不是你的。查看您正在使用的 MSBuild.exe.config 文件,它有 很多 个 bindingRedirect 元素来解决这些版本号问题。您的 app.config 文件没有它们,它也需要它们。
-
但是就像我在问题中所说的,当我尝试通过从 C:\Program Files (×86)\MSBuild\12.0\Bin 调用 msbuild.exe 直接编译项目时,编译运行良好。所以就像我说的那样,它在清理部分期间不会进入“CleanWebsitesPackageCore”目标,而当我通过 buildManager 尝试它并在该目标上失败时它会去那里。
-
您是否使用正确版本的 .targets 文件也不明显。这些版本也太多了。
标签: .net c#-4.0 msbuild microsoft.build buildmanager