TFS在不同项目中使用相同程序集的多个版本构建问题

时间:2014-05-05 20:47:38

标签: c# asp.net .net tfs2010 tfsbuild

我一直在使用我们的TFS构建服务器遇到问题。我有2个项目(都在同一个解决方案中),1个是WebForms项目,运行.Net 4.0。第二个是运行.Net 4.5的ASP .Net MVC5项目。还有一个Silverlight项目,但只有前两个问题才能重现。

这两个项目都将NuGet包用于各种库。有时,包中有不同的组件用于各自的环境。 .Net 4.0,4.5,SL程序集等

构建服务器似乎将所需的所有库转储到单个文件夹中,然后从中提取以构建解决方案。在许多情况下,这会导致问题,错误的项目会得到错误的程序集版本。这不会在本地发生,仅在构建服务器上发生。我无法弄清楚我需要做些什么来防止这种情况发生。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

是的,我讨厌这个标准行为,但默认情况下TFS会将所有内容输出到同一个文件夹,然后你会得到各种错误,具体取决于msbuild编译你的项目的顺序,如果你有相同名称甚至项目输出的引用同名。

最简单的解决方法是使用“流程”选项卡上的AsConfigured选项,'2。建立' - >构建定义窗口的“输出位置”。这样可以保持正常的源结构不变,但我认为您将失去对自动删除输出的支持(即您必须自己提供脚本)。如果您只使用TFS Build进行验证,这是最干净的方法。

您还可以使用PerProject设置并将项目拆分为两个不同的解决方案,可能以平台为后缀(我们已在公司中多次完成)。然后,您指定构建过程的两个解决方案,它将在输出中创建两个单独的文件夹,每个解决方案一个。

这是假设您使用的是TFS 2013.在TFS2012中,有一个类似的选项,但它在'3。高级' - > “特定于解决方案的构建输出”。如果您使用的是TFS2012,则可能需要使用此路线,或者您需要自己修改默认工作流程以添加自己的逻辑。

编辑:

从你的评论到另一张海报,我看到你正在使用TFS 2010.嗯...我认为当时绝对不支持,我记得有类似的问题,但我们升级到TFS 2012,一切都很顺利。

我认为您唯一的选择是创建两个单独的构建定义并以此方式构建每个解决方案,或者您需要签出xaml工作流并使用您自己的逻辑对其进行编辑。也许下载TFS2012模板并将其“移植”到TFS2010将是一个更好的方法,因为至少你不会那样重新发明轮子。