2013-10-30 39 views
0

我需要重建一组自定义TFS构建活动,并且出现以下错误。我的搜索结果来自MS,这是因为MS将Microsoft.Build.Engine软件包从4.0框架中提取出来并将其包含在VS工具中。VS 2012中MSBuild自定义活动

主要参考 “Microsoft.TeamFoundation.Build.Workflow,版本= 12.0.0.0,文化=中性公钥= b03f5f7f11d50a3a,ProcessorArchitecture用于= MSIL” 无法得到解决,因为它在.NET Framework的间接依赖程序集“Microsoft.Build.Engine,版本= 12.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”,它具有比当前目标框架中的版本“4.0.0.0”更高的版本“12.0.0.0”。

任何想法我能做些什么呢?我针对4.5框架,安装了VS 2012和2013,尽管使用2012来构建这个包。

回答

0

我有类似的问题,一般来说,李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构建服务器上,确保微软的最新模板的逻辑是用过的。
+0

@RussellHorwood:根据微软的说法,2013年模板的自定义应该可以使用TFS Build 2013。但我还没有机会自己测试它。我的问题是在2013年执行_2010_模板的自定义。 – quintessential5

1

检查参考Microsoft.Build.Engine或参考路径。该二进制的MSBuild和它的依赖已经从c:\windows\Microsoft.NET文件夹移动到:C:\Program Files (x86)\MSBuild\12.0\Bin

+0

这并没有为我工作。直接引用这些文件似乎会添加它们,但引用的属性已更改为c:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5 \ Microsoft.Build.Framework.dll。删除并重新添加它们并没有改变任何东西。 – kevinpdavis

+0

尝试编辑csproj文件并向参考提供提示路径:http://stackoverflow.com/a/462650/736079 – jessehouwing

+0

嗯。试过了,即使我把hintpath放到那个目录后,引用也没有改变。基于这一点,我假设根据这个:http://stackoverflow.com/questions/1882038/hintpath-vs-referencepath-in-visual-studio,它是在参考路径和优先使用,也许。我甚至试图抓取.dll,并将它们放在本地lib目录中,并且仍然需要其他目录。 – kevinpdavis

0

我一直有在Visual Studio中的同一个问题2012年

我重新创建我的解决方案在VS2013和所有的问题消失了!不是一个真正的解决方案,但如果你有权访问2013年,那么我建议你尝试一下。