【问题标题】:TFS Build Issues With Multiple Versions of the Same Assembly in Different Projects不同项目中同一程序集的多个版本的 TFS 构建问题
【发布时间】:2014-06-22 07:01:11
【问题描述】:

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

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

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

【问题讨论】:

  • 什么版本的 TFS?这是相关的,因为在 TFS2013 中,您可以配置构建以将多个解决方案拆分为多个文件夹。然后,您所要做的就是创建两个解决方案,每个站点一个,并将这两个解决方案构建为同一构建的一部分。此外,在通过 ASP .NET 编译器运行后,您的 ASP .NET 项目应自动推送到构建放置中的“_PublishedWebsites”文件夹。这也可以解决您的问题。
  • 我希望你意识到你在回复别人?我是发布您所看到的答案的人;)。此外,您应该将您的“tfs”标签更改为“tfs2010”,因为这在实现您想要的方式方面有非常明显的差异。
  • 谢谢,移动它们并重新标记 :)

标签: c# asp.net .net tfsbuild


【解决方案1】:

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

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

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

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

编辑:

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

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

【讨论】:

  • 遗憾的是,这适用于 TFS 2010。尽管 AsConfigured 方法可能是可行的,但我必须编写一些脚本才能获得我想要的东西,但这比挑剔的构建服务器更可取。
  • 实际上,我在 TFS 2010 中没有看到任何这些选项。
  • 值得注意的是,我尝试了单独的解决方案路线,遇到了两个项目之一的 Nuget 包不正确恢复的问题。从一个包中刷新 Nuget 使一个工作,只是打破另一个。共识似乎是升级的时候了。
  • 如果你能详细说明这个新问题(也许在一个新问题中),我相信我们可以让它发挥作用。我们自己的解决方案在这里非常混乱,即使在多个解决方案中引用的项目(我认为您在这种情况下不需要),我也设法使 nuget 包恢复工作。当然,这都是假设您无法轻松升级 TFS,否则我强烈推荐 TFS 2013,因为新功能非常好。
  • 作为后续,我们本周移至 TFS 2013,AsConfigured 属性成功了,正常的解决方案结构得以保留。然后,我使用此页面上的信息msdn.microsoft.com/en-us/library/dn376353.aspx#scripts(以及它提到的 Powershell 脚本)创建了一个构建后步骤,将我想要的内容放入 bin 文件夹中,然后将其复制到放置位置。
猜你喜欢
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2019-02-18
  • 2017-01-09
  • 2011-05-25
相关资源
最近更新 更多