我遇到了类似的问题,总的来说,Lee Higgitt 的回答是正确的。原因是 Microsoft.TeamFoundation.Build.Workflow v.12 依赖于 Microsoft.Build.dll v.12,我了解到这需要使用 Microsoft.Build.Tasks.v12.0 完成构建。 dll。如果 MSBuild 属性 VisualStudioVersion 设置为 12.0(例如,当 sln 是 VS 2013 sln 时),则使用 Microsoft.Build.Tasks.v12.0.dll。相反,如果 VisualStudioVersion 设置为 11.0(例如,当它是 VS 2012 sln 时),则
使用 Microsoft.Build.Tasks.v4.0.dll。v4 Tasks dll 产生错误;v12 任务 dll 没有。一般来说,然后,将 sln 升级到 VS 2013 将修复它。
但是,如果使用的是 TFS 构建服务器,那就另当别论了。即使 VisualStudioVersion 为 12.0,由于使用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe 进行构建,并且该目录中仅存在 v4 Tasks dll,因此构建被迫使用v4 Tasks dll,导致产生错误。
您可能认为强制构建使用 x86 版本的 MSBuild 可以完成这项工作,但是 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 仍然只包含 v4 Tasks dll!
根据我的命令行测试,当使用 C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe 完成构建时,v12 Tasks dll 存在于该目录中并被使用,因此构建工作正常!
另外,我把上面的问题简单化了。我尝试将 v12 Tasks dll 和 Microsoft.Build.Utilities.v12.0.dll 复制到 C:\Windows\Microsoft.NET\Framework\v4.0.30319 中,但这不允许该目录中的 msbuild 实例构建我的 sln 成功了。
总之,我认为这一定是微软的bug。我会和他们一起创建一张票,并在我学到任何东西时更新这个线程。
更新:
这是Microsoft Connect 上的问题。
更新 2:
从Microsoft Connect 上的问题可以看出,对于 TF Build 案例,如果使用 TFS 2013 附带的模板,则不会重现此问题(尽管我自己还没有机会确认这一点)。所以,要解决这个问题...
- 如果它发生在本地,请将解决方案升级到 VS 2013。
- 如果它在 TFS 构建服务器上,请确保正在使用 Microsoft 最新模板的逻辑。