我有类似的问题,一般来说,李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任务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。我会和他们一起创建一张票,并在我学到任何东西时更新这个线程。
更新:
这里的the issue on Microsoft Connect。
更新2:
正如人们可以从the issue on Microsoft Connect看到,对于TF构建的情况下,如果使用随TFS 2013的模板,这个问题不repro'ed(虽然我的天堂”我还有机会证实这一点)。因此,要解决这个问题...
- 如果它发生在本地,升级解决VS 2013
- 如果它是一个TFS构建服务器上,确保微软的最新模板的逻辑是用过的。
@RussellHorwood:根据微软的说法,2013年模板的自定义应该可以使用TFS Build 2013。但我还没有机会自己测试它。我的问题是在2013年执行_2010_模板的自定义。 – quintessential5