Ho due risposte: cosa facciamo e cosa suggerisco per voi.
Per noi, abbiamo una suite di app Web che hanno tutti MOLTI componenti condivisi. In quanto tale, sebbene si tratti di circa 50 diversi assembly (VS Projects) e 5-10 soluzioni (a seconda di come la si guarda), c'è una sovrapposizione molto significativa tra tutti loro, il che significa che vogliamo usare TFS per-dev piuttosto che unire di ramificare e unire le risorse sovrapposte. Pertanto, manteniamo tutto ciò in un unico progetto TFS. Ecco come abbiamo impostato la nostra (nomi cambiati per dare un senso a voi):
"Official Projects" (Collection)
"Production Applications" (Project)
"Technology Proof of Concepts" (Project)
"Reference Projects" (Project) - this is a simple solution/projects using our architecture to make our architecture easier to understand as people join our team. Other reference apps will go here in the future.
"TFS Configuration" (Project)
"Playground" (Collection)
"John Doe" (Project)
"Jane Doe" (Project)
"Security Team" (Project)
"Production Test" (Project)
Nella nostra messa a punto, abbiamo un posto per il codice ufficiale della società. Inoltre, disponiamo di un'area in cui le persone possono divertirsi senza temere di incasinare nulla mentre sono in grado di trarre vantaggio da vari benefici correlati a TFS.
Tuttavia, nel tuo scenario, se sto leggendo tra le righe correttamente, vorrei suggerire qualcosa di diverso. Le mie ipotesi:
- Ogni progetto, oltre ad avere alcune assemblee comuni (sto pensando di registrazione, la sicurezza, e di altri gruppi di utilità che sono condivisi a livello aziendale), sono progetti non collegati.
- Gli assembly condivisi/comuni non vengono regolarmente modificati, quindi è possibile utilizzare riferimenti DLL anziché riferimenti di progetto in cui si utilizza sempre la versione aggiornata del giorno/ora del codice.
- (presupposto basato su TFS mentre sto ancora imparando) È possibile diramare i progetti dalla stessa raccolta ma non è possibile diramarli tra le raccolte.
- Oltre agli assembly condivisi sopra menzionati, nessun altro codice è condiviso tra i team.
Quindi, con questi presupposti, vorrei andare con qualcosa di simile:
"Common Resources" (Collection)
"Source" (Project) - everything goes here such as logging assemblies, security assemblies, etc.
"Version 1" (Project) - Branch as you "rev" your common assemblies so people have access to older versions.
"Version 2" (Project)
"Version 3" (Project"
etc.
"Team 1" (Collection)
"Project 1"
"Project 2"
"Project 3"
"Project 4"
"Project 5"
"Team 2" (Collection)
"Project 1"
"Project 2"
"Project 3"
"Team 3" (Collection)
"Project 1"
"Project 2"
etc.
Facendo in questo modo, si fa riferimento alle assemblee comuni tramite i riferimenti DLL. Tu come team o dev su un progetto specifico puoi decidere quando inizi a utilizzare una versione più recente di un assembly comune. Per fare ciò, si ottiene semplicemente l'ultima versione sul ramo di quella versione e quindi si aggiunge un riferimento ad esso. Se la mia ipotesi n. 3 è sbagliata, allora spero che tu possa fare qualcosa di meglio. Altrimenti, ogni progetto ha il proprio spazio (che può contenere più di una soluzione/progetto VS che è una buona idea) e il tuo team ha la propria collezione per stare lontano dagli altri team.
Solo il mio $ 0.02 vale ...
È possibile aggiornare la struttura per indicare dove si trovano i file .sln e .csproj? Attualmente ho uno scenario in cui abbiamo una soluzione per articolo deployable (servizio Windows o applicazione Web) e ognuno di questi può dipendere da progetti all'interno delle soluzioni (ad esempio un progetto di interfacce in una soluzione a cui fa riferimento un altro progetto in un'altra soluzione). Il tuo suggerimento soddisfa questo?Attualmente copiamo manualmente gli assembly distribuibili quando creiamo in una posizione nota e pre-costruiamo su altri progetti che copiamo nelle dipendenze e facciamo riferimento alla copia. – jamiebarrow