TFS 2012多个解决方案和使用带门禁检入的构建

4
从 MSDN 论坛复制原始问题 在这里,但在TFS 2010中未解决。我们正在使用TFS 2012。
我有两个解决方案和对应的文件夹,如下:
SolutionA\SolutionsA.sln SolutionB\SolutionB.sln
每个解决方案都配置了 Gated Check-in build;即两个构建定义 GatedSolutionA 和 GatedSolutionB。
现在的情况是,如果我同时检入这两个文件夹中的更改,则 TFS 会显示一个对话框以选择构建(下拉菜单包括 GatedSolutionA、GatedSolutionB)来运行更改集。我的更改集中,在 Solution B 中有破坏性更改,在 Solution A 中有非破坏性更改。即构建 GatedSolutionB 将失败,但 GatedSolutionA 将通过。
当我选择 GatedSolutionA 来构建我的更改集时,TFS 会将其检入,从而使 Solution B 处于破碎状态,而 Gated check-in 的目的被解决了。
如果我将触发器更改为 CI,TFS 将排队执行两个构建。
我想要的是相同的行为,即所有 Gated 构建都排队执行,如果其中一个失败,则拒绝更改集。
注意:我不想为这两个解决方案创建单一构建定义。此外,我知道我们可以通过创建两个单独的更改集来避免发生此问题,但通常情况下,开发人员不知道他们正在为其他解决方案检查文件。
在VS/TFS 2010和TFS 2012之间是否有任何改进或更改以适应此场景?
编辑
我将尝试用一个场景来澄清。
SolutionA(我们称其为 StandardCalculator)包含2个项目,ProjectA 和 ProjectC。 ProjectA 是名为 StandardCalculatorUI 的控制台应用程序,而 ProjectC 是名为 CalculatorLogic 的类库。
SolutionB(我们称其为 AdvancedCalculator)包含2个项目。 ProjectB 是名为 AdvancedCalculatorUI 的控制台应用程序,而相同的 ProjectC(名为 CalculatorLogic)。
ProjectC 实现了用于添加、减去、除以和乘以的公共方法。
ProjectA 从 ProjectC 调用 Add 和 Subtract 的功能。
ProjectB 从 ProjectC 调用 Divide 和 Multiply 的功能。
GatedSolutionA 构建定义构建 SolutionA(因此构建 ProjectA 和 ProjectC)
GatedSolutionB 构建定义构建 SolutionB(因此构建 ProjectB 和 ProjectC)
现在,在 SolutionA 打开时,我会从 ProjectC 中删除 Multiply 和 Divide 方法,因为 ProjectA 不使用它们(但不知道 ProjectB(在 SOlutionB 中)使用)。

我提交我的代码后,系统会提示我选择一个Gated build definition进行检查(因为GatedSolutionA和GatedSolutionB的工作区中都包括ProjectC)。

如果我选择了GatedSolutionA,则检查将通过,代码被提交,但这可能会无意中破坏SolutionB。

我希望它能同时针对GatedSolutionA和GatedSolutionB进行排队,而不是强制让我选择其中一个。


你想让构建定义检查所有解决方案的构建,但又不想将所有解决方案添加到构建定义中? - stuartd
我的修改/场景有帮助吗,哈哈 - Kyle
创建一个包含A和B项目的解决方案,并将其进行门控? - Edward Thomson
所以,您的意思是您有一些常用类库,许多解决方案都会引用它们。当您将其中一个解决方案检入 TFS 时,如果接受对这些公共类库的更改可能会破坏其他正在使用它们的解决方案,您不希望发生这种情况?我的理解正确吗?与此类似- http://stackoverflow.com/questions/13497295/tfs-2012-automatically-build-projects-that-depend-on-current-one?rq=1 - user2447953
1个回答

1
< p > < em > Edward给出了我使用的答案。您需要创建一个新的构建定义。 < p > 我们通过创建包含所有项目的单独解决方案来解决类似的情况。该解决方案由单独的门控构建定义使用。您仍然拥有其他构建定义,但触发器将是手动的(而不是门控的)。 < p >因此,您将拥有3个解决方案:StandardCalc、AdvancedCalc和BothCalcs。以及3个构建定义。在开发过程中,您不使用全包含的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接