Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 TFS 2012多种解决方案&;使用门控签入构建_Visual Studio 2012_Tfs - Fatal编程技术网

Visual studio 2012 TFS 2012多种解决方案&;使用门控签入构建

Visual studio 2012 TFS 2012多种解决方案&;使用门控签入构建,visual-studio-2012,tfs,Visual Studio 2012,Tfs,从MSDN论坛复制了原始问题,但未在TFS 2010中解决。我们正在使用TFS 2012 我在相应的文件夹中有两个解决方案,例如 SolutionA\SolutionsA.sln SolutionB\SolutionB.sln 每个解决方案都配置了门控签入生成;i、 e.两个构建定义GatedSolutionA和GatedSolutionB 现在的情况是,如果我同时签入两个文件夹中的更改,TFS将显示一个对话框,选择build(使用GatedSolutionA、GatedSolutionB下拉菜

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

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

SolutionA\SolutionsA.sln SolutionB\SolutionB.sln

每个解决方案都配置了门控签入生成;i、 e.两个构建定义GatedSolutionA和GatedSolutionB

现在的情况是,如果我同时签入两个文件夹中的更改,TFS将显示一个对话框,选择build(使用GatedSolutionA、GatedSolutionB下拉菜单)以针对更改集运行。我的变更集在解决方案B中具有中断性变更,在解决方案A中具有非中断性变更。即,构建网关解决方案B将失败,但网关解决方案A将通过

当我选择GatedSolutionA根据我的变更集进行构建时,TFS会将其签入,从而使解决方案B处于中断状态,并且解决方案B的门控签入目的失败

如果我将生成定义的触发器更改为CI,TFS将对两个生成进行排队

我所寻找的是相同的行为,即所有封闭构建都排队,如果其中一个失败,则应拒绝变更集

注意:我不想为这两个解决方案创建单一构建定义。另外,我知道我们可以通过创建两个单独的变更集来避免这个问题的发生,但通常情况下,当开发人员不知道他们正在签入一些文件以获取解决方案时,就会发生这种情况

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

编辑

我将尝试用一个场景来澄清

SolutionA(我们称之为StandardCalculator)包含两个项目,ProjectA和ProjectC。ProjectA是名为StandardCalculatorUI的控制台应用程序,ProjectC是名为CalculatorLogic的类库

SolutionB(我们称之为AdvancedCalculator)包含2个项目。ProjectB是一个名为AdvancedCalculatorUI的控制台应用程序,也是同一个ProjectC(一个名为CalculatorLogic的类库)

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

ProjectA调用ProjectC的加法和减法功能

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

GatedSolutionA构建定义构建SolutionA(从而构建ProjectA和ProjectC)

GatedSolutionB构建定义构建解决方案B(以及ProjectB和ProjectC)

现在打开SolutionA后,我从ProjectC中删除了乘法和除法方法,因为ProjectA不使用它们(但ProjectB(在SOlutionB中))会不知不觉地使用它们)

我签入代码,并看到要检查的门控构建定义(因为GatedSolutionA和GatedSolutionB的工作空间映射为包含ProjectC)

如果我选择GatedSolutionA,则签入将成功,从而被签入,不知不觉地破坏了SolutionB

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

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

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


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

您希望生成定义检查所有的生成解决方案,但不希望将所有的解决方案添加到生成定义中?我的编辑/场景是否有助于创建一个包含a和B的所有项目的解决方案,以及,您是说您有一些通用类库,许多解决方案都会引用这些类库。当您将一个解决方案签入TFS时,如果它会破坏可能正在使用它的另一个解决方案,您不希望它接受对其中一个公共类库的任何更改吗?我说得对吗?与此类似-