4

从此处的 MSDN 论坛复制原始问题,但在 TFS 2010 中未解决。我们使用的是 TFS 2012。

我在相应的文件夹中有两个解决方案,例如

解决方案A\解决方案A.sln 解决方案B\解决方案B.sln

每个解决方案都配置了 Gated Check-in 构建;即两个构建定义GatedSolutionA 和GatedSolutionB。

现在的情况是,如果我同时检查两个文件夹中的更改,TFS 会显示一个对话框来选择构建(使用 GatedSolutionA、GatedSolutionB 下拉)以针对更改集运行。我的变更集在解决方案 B 中有重大更改,在解决方案 A 中有非重大更改。即构建 GatedSolutionB 会失败,但 GatedSolutionA 会通过。

当我选择 GatedSolutionA 来针对我的变更集进行构建时,TFS 将其签入,这反过来使解决方案 B 处于损坏状态,并且解决方案 B 的门控签入目的被破坏。

如果我将触发器更改为 CI 以进行构建定义,TFS 会将两个构建都排入队列。

我正在寻找的是相同的行为,即所有门控构建都排队,如果其中一个失败,变更集应该被拒绝。

注意:我不想为这两种解决方案创建单个构建定义。另外,我知道我们可以通过创建两个单独的变更集来避免这个问题的发生,但这通常发生在开发人员不知道他们有一些文件正在签入以寻求解决方案而不是他们正在处理的解决方案时。

VS/TFS 2010 和 TFS 2012 之间是否有任何改进或更改以适应这种情况?

编辑

我会尝试用一个场景来澄清。

解决方案A(我们称之为标准计算器)包含 2 个项目,ProjectA 和 ProjectC。ProjectA 是一个名为 StandardCalculatorUI 的控制台应用程序,ProjectC 是一个名为 CalculatorLogic 的类库。

解决方案B(我们称之为 AdvancedCalculator)包含 2 个项目。ProjectB 是一个名为 AdvancedCalculatorUI 的控制台应用程序和相同的 ProjectC(一个名为 CalculatorLogic 的类库)

ProjectC 实现了加、减、除和乘的公共方法。

ProjectA 从 ProjectC 调用 Add 和 Subtract 的功能。

ProjectB 从 ProjectC 调用除法和乘法的功能。

GatedSolutionA 构建定义构建 SolutionA(以及 ProjectA 和 ProjectC)

GatedSolutionB 构建定义构建 SolutionB(以及 ProjectB 和 ProjectC)

现在打开解决方案A,我从ProjectC中删除乘法和除法方法,因为ProjectA不使用它们(但在不知不觉中ProjectB(在SOlutionB中)使用它们)。

我签入了我的代码,并显示了要检查的 Gated 构建定义(因为 GatedSolutionA 和 GatedSolutionB 的工作区映射为包含 ProjectC)。

如果我选择 GatedSolutionA,那么签入将成功并因此被签入,在不知不觉中破坏了解决方案 B。

我想要它做的是对 GatedSolutionA 和 GatedSolutionB 排队,而不是强迫我选择一个。

4

1 回答 1

1

爱德华给出了我用过的答案。您必须创建一个新的构建定义。

我们通过创建一个包含所有项目的单独解决方案解决了类似的情况。该解决方案由单独的门控构建定义使用。您仍然有其他构建定义,但触发器将是手动的(不是门控的)。

因此,您将有 3 个解决方案:StandardCalc、AdvancedCalc 和 BothCalcs。和 3 个构建定义。在开发过程中,您不会使用包罗万象的解决方案。

于 2014-08-29T18:49:39.600 回答