从MSDN论坛here复制了原始问题,但在TFS 2010中未解决。我们正在使用TFS 2012。
我在相应的文件夹中有两个解决方案,例如
SolutionA \ SolutionsA.sln SolutionB \ SolutionB.sln
每个解决方案都配置了Gated Check-in构建;即两个构建定义GatedSolutionA和GatedSolutionB。
现在的情况是,如果我同时检查两个文件夹中的更改,TFS会显示一个对话框,用于选择构建(使用GatedSolutionA下拉,GatedSolutionB)以针对变更集运行。我的变更集在解决方案B中有突破性变化,在解决方案A中有非破坏性变化。即Build GatedSolutionB将失败,但GatedSolutionA将通过。
当我选择GatedSolutionA来构建我的变更集时,TFS会将其检入,这反过来使解决方案B处于中断状态,并且对于解决方案B,Gated签入的目的将被取消。
如果我将触发器更改为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实现了Add,Subtract,Divide和Multiply的公共方法。
ProjectA调用ProjectC的Add和Subtract功能。
ProjectB从ProjectC调用Divide和Multiply的功能。
GatedSolutionA构建定义构建SolutionA(以及ProjectA和ProjectC)
GatedSolutionB构建定义构建SolutionB(以及ProjectB和ProjectC)
现在使用SolutionA打开i删除ProjectC中的Multiply和Divide方法,因为ProjectA不使用它们(但不知不觉中是ProjectB(在SOlutionB中))。
我检查了我的代码,并提供了要检查的Gated构建定义,(Becuase GatedSolutionA和GatedSolutionB将工作空间映射到包含ProjectC)。
如果我选择GatedSolutionA,那么签入将成功并因此被检入,在不知不觉中破坏了SolutionB。
我想要它做的是排队GatedSolutionA和GatedSolutionB,而不是强迫我选择一个。
答案 0 :(得分:1)
爱德华给出了我用过的答案。您必须创建新的构建定义。
我们通过创建包含所有项目的单独解决方案来解决类似的情况。该解决方案由单独的gated构建定义使用。您仍然拥有其他构建定义,但触发器将是手动(不是门控)。
所以你将拥有3个解决方案:StandardCalc,AdvancedCalc和BothCalcs。 3个构建定义。在开发过程中,您不使用全包解决方案。