こちらの MSDN フォーラムから元の質問をコピーしましたが、TFS 2010 内では解決されませんでした。TFS 2012 を使用しています。
対応するフォルダーに2つのソリューションがあります。
SolutionA\SolutionsA.sln SolutionB\SolutionB.sln
各ソリューションには、Gated Check-in ビルドが構成されています。つまり、GatedSolutionA と GatedSolutionB の 2 つのビルド定義です。
現在の状況は、両方のフォルダーの変更を一緒にチェックインすると、TFS は、変更セットに対して実行するビルド (GatedSolutionA、GatedSolutionB でドロップダウン) を選択するダイアログ ボックスを表示します。私の変更セットには、ソリューション B に重大な変更があり、ソリューション A に重大でない変更があります。つまり、ビルド GatedSolutionB は失敗しますが、GatedSolutionA はパスします。
変更セットに対してビルドする GatedSolutionA を選択すると、TFS はそれをチェックインします。これにより、ソリューション B が壊れた状態のままになり、ソリューション B のゲート チェックインの目的が無効になります。
ビルド定義のトリガーを CI に変更すると、TFS は両方のビルドをキューに入れます。
私が探しているのは同じ動作です。つまり、すべての Gated ビルドがキューに入れられ、そのうちの 1 つが失敗した場合、チェンジセットは拒否されます。
注: 両方のソリューションに対して単一のビルド定義を作成したくありません。また、2 つの個別の変更セットを作成することでこの問題の発生を回避できることはわかっていますが、これは通常、開発者が作業中以外のソリューションのためにチェックインされているファイルがあることに気付いていない場合に発生します。
このシナリオに対応するために、VS/TFS 2010 と TFS 2012 の間で改善または変更された点はありますか?
編集
シナリオで明確にしてみます。
SolutionA (StandardCalculator と呼びます) には、ProjectA と ProjectC の 2 つのプロジェクトが含まれています。ProjectA は StandardCalculatorUI というコンソール アプリケーションで、ProjectC は CalculatorLogic というクラス ライブラリです。
SolutionB (AdvancedCalculator と呼びます) には 2 つのプロジェクトが含まれています。ProjectB は AdvancedCalculatorUI と呼ばれるコンソール アプリケーションであり、同じ ProjectC (CalculatorLogic と呼ばれるクラス ライブラリ)
ProjectC は、Add、Subtract、Divide、および Multiply のパブリック メソッドを実装しています。
ProjectA は、ProjectC から Add および Subtract の機能を呼び出します。
ProjectB は ProjectC から除算と乗算の機能を呼び出します。
GatedSolutionA ビルド定義は SolutionA (したがって ProjectA と ProjectC) をビルドします
GatedSolutionB ビルド定義は SolutionB をビルドします (したがって、ProjectB と ProjectC)
SolutionA を開いた状態で、ProjectC から Multiply メソッドと Divide メソッドを削除します。これは、ProjectA がそれらを使用していないためです (ただし、無意識のうちに ProjectB (SOLutionB 内)) が使用しているためです)。
コードをチェックインすると、チェック対象の Gated ビルド定義が表示されます (GatedSolutionA と GatedSolutionB には、ProjectC を含むようにマップされたワークスペースがあるため)。
GatedSolutionA を選択すると、チェックインが成功してチェックインされ、知らないうちに SolutionB が壊れてしまいます。
私がやりたいのは、GatedSolutionA と GatedSolutionB の両方に対してキューに入れることです。どちらかを選択するように強制するのではありません。