Andrew:
En primer lugar, se viola un par de "mejores prácticas" para lograr esto, pero el pragmatismo es donde se encuentra con las mejores prácticas del mundo real.
Lo que hacemos es la siguiente:
- Todos los binarios se comprueban para TFS dentro de una carpeta LocalBin que consolida todos nuestros binarios.
- Todos los ensamblados compartidos se encuentran dentro de una carpeta llamada LocalBin/SharedBin
- La carpeta SharedBin está ramificada a una carpeta SharedBin de nivel superior dentro de los proyectos del equipo consumidor.
- En una compilación principal exitosa, LocalBin/Sharedbin se combina con las carpetas SharedBin de los proyectos.
Se termina siendo algo como esto:
$/ProjectA/Main/Localbin/SharedBin
está ramificado a $/ProjectB/Main/SharedBin
y $/ProjectB/Dev/Sharedbin
(así como las carpetas equivalentes en $/ProjectC
, $/ProjectD
etcétera).
Solo compartimos esto cuando tenemos una compilación MAIN exitosa, y la compilación es responsable de fusionarse no solo con los otros proyectos principales de rama, sino también con los proyectos de rama de DEV, para que estén actualizados.
Hemos trabajado con la idea de manejar los binarios en una ubicación de red compartida después de una compilación exitosa, y tener una convención para hacer referencia a esos binarios en esa red compartida, pero este proceso nos funciona bien hoy, y detestamos hacer cambios en este punto (cosas más importantes que suceden por el momento).
Esta es una de esas cosas que es difícil de describir completamente en una publicación, por lo que si tiene más preguntas, estaremos encantados de tratar de responderlas.
BTW, nuestra solución fue construida y se ejecuta bajo TFS2008 con miles de archivos de proyecto y probablemente millones de líneas de código. Aumenta el tiempo de compilación debido a la fusión y aumenta la cantidad de espacio utilizado en su repositorio, pero ambos han sido manejables hasta el momento.
Gracias por la solución. ¡Me llevará algo de tiempo investigar! –