The copied source question from the MSDN forums here , but was not resolved in TFS 2010. We use TFS 2012.
I have two solutions in their respective folder, for example.
SolutionA \ SolutionsA.sln SolutionB \ SolutionB.sln
Each solution has a built-in Checked in configuration; that is, two build definitions, GatedSolutionA and GatedSolutionB.
Now the situation is that if I check the changes of both folders together, TFS displays a dialog box for choosing the assembly (drop-down with GatedSolutionA, GatedSolutionB) to start with a set of changes. My change set breaks the changes in solution B and doesn't break the changes in solution A. ie Build GatedSolutionB will not work, but GatedSolutionA will pass.
When I select GatedSolutionA to build against my changeset, TFS checks it, which in turn leaves solution B in a broken state and the Gated check-in target is defeated for solution B.
If I changed the trigger to CI to determine the assembly, the TFS queues will build as.
What I'm looking for is the same behavior, that is, all gated assemblies are queued and if one of them fails, the set of changes should be rejected.
Note. I do not want to create a single line definition for both solutions. In addition, I know that we can avoid this problem by creating two separate sets of changes, but this usually happens when developers do not know that they have files that are checked for a solution, except that they work.
Something improved or changed between VS / TFS 2010 and TFS 2012 to accommodate this scenario?
EDIT
I will try and clarify the script.
SolutionA (we will call StandardCalculator) contains 2 projects ProjectA and ProjectC. ProjectA is the StandardCalculatorUI console application, and ProjectC is the class library called CalculatorLogic.
SolutionB (we will call AdvancedCalculator) contains 2 projects. ProjectB is a console application called AdvancedCalculatorUI and the same ProjectC (class library called CalculatorLogic)
ProjectC implements public methods for adding, subtracting, dividing, and multiplying.
ProjectA names the functionality to add and subtract from ProjectC.
ProjectB invokes functionality for Divide and Multiply from ProjectC.
GatedSolutionA will build the assembly definition of SolutionA (and therefore ProjectA and ProjectC)
GatedSolutionB builds the assembly definition of SolutionB (and therefore ProjectB and ProjectC)
Now, with SolutionA open, I REMOVE the Multiply and Divide methods from ProjectC because ProjectA does not use them (but unconsciously ProjectB (in SOlutionB) does).
I check my code and imagine with what Gated build definition to test, (Becuase GatedSolutionA and GatedSolutionB have workspaces displayed to enable ProjectC).
If I choose GatedSolutionA, then the validation will be successful and thus will be verified, unknowingly destroying SolutionB.
I want this to be the queue for GatedSolutionA and GatedSolutionB, but it doesnβt make me choose.