Realmente depende de la madurez de su código compartido. Yo diría que hay tres enfoques que puede seguir, cada uno con sus propias ventajas y desventajas:
Opción 1: Directamente referencia a salir de su propio proyecto de equipo
Team Project Application 1
--> Development
--> ...
--> MAIN
--> Sources
--> Application 1
--> Application1.sln
Team Project Application 2
--> Development
--> ...
--> MAIN
--> Sources
--> Application 2
--> Application1.sln
Team Project CoreProject 1
--> Development
--> ...
--> MAIN
--> Sources
--> CoreProject1.csproj
Con este enfoque, se puede establecer en su CI se construye para que todas las aplicaciones comiencen a desarrollarse una vez que se haya registrado en un CoreProject.
que están obligados a tener los proyectos de equipo correlacionado localmente con una convención (o de lo contrario se romperá la compilación)
Este es un buen enfoque si cambia constantemente la CoreProject & necesita esos cambios reflejados rápidamente a todas las aplicaciones afectadas.
También implica que puede permitirse la inestabilidad en una determinada aplicación, si un cambio radical en un CoreProject lo inflige.
Opción 2: Indirectamente referencia a ellos a través de ramificación
Team Project Application 1
--> Development
--> ...
--> MAIN
--> SharedSources
--> CoreProject1_branch
--> CoreProject1.csproj
--> Sources
--> Application 1
---> Application1.sln
Team Project Application 2
--> Development
--> ...
--> MAIN
--> SharedSources
--> CoreProject1_branch
--> CoreProject1.csproj
--> Sources
--> Application 2
---> Application1.sln
Team Project CoreProject 1
--> Development
--> ...
--> MAIN
--> Sources
--> CoreProject1.csproj
Con este enfoque, cada vez que se haya registrado cambios en CoreProject1, es necesario organizar una fusión para cada aplicación afectada. Esto supone cierto esfuerzo, pero le da tiempo para estabilizar CoreProject en su propio patio de juegos y luego combinarlo con sus aplicaciones.
Este enfoque implica que también tiene una definición de compilación para cada CoreProject.
En general, esta es una buena forma de proceder si valora la estabilidad de CoreProject. & no puede permitirse 'contaminar' sus aplicaciones en caso de que los cambios causen problemas. Este es por cierto el enfoque que buscamos.
Opción 3: Hacer referencia de archivo en cada aplicación
Team Project Application 1
--> Development
--> ...
--> MAIN
--> SharedBinaries
--> CoreProject1_branch
--> CoreProject1.dll
--> Sources
--> Application 1
---> Application1.sln
Team Project Application 2
--> Development
--> ...
--> MAIN
--> SharedBinaries
--> CoreProject1_branch
--> CoreProject1.dll
--> Sources
--> Application 2
---> Application1.sln
Team Project CoreProject 1
--> Development
--> ...
--> MAIN
--> Sources
--> CoreProject1.csproj
Con este enfoque, usted 'd necesidad de comprobar en la salida binaria de un CoreApplication construir en cada aplicación.
Esto solo se recomienda si confía en que CoreApplication es estable &, no necesita depurarlo regularmente.
Esencialmente la opción 2 & opción 3 son similares, separados por el conocido debate "referencia proyecto vs. archivo". Ver here para un recurso SO, se puede recuperar mucho más a través de búsquedas.
Si sus proyectos principales se deben a cambios constantes y/o tienen una baja cobertura de prueba de unidad, debe ir a la opción 2 (o 3).
Si confía en su calidad, optar por la opción 1 es una buena opción, ya que mejorará en gran medida su productividad general.
Sin ningún conocimiento de sus productos y su calidad, simplemente basándonos en los números bastante grandes que proporciona (20 personas, 50 soluciones, 7 proyectos centrales), optaría por la opción 2/3.
Otra sugerencia importante: sucede más que a menudo que los proyectos compartidos no tienen ningún medio de prueba separada. Si este es el caso y los proyectos centrales no tienen pruebas de unidades propias, ningún plan de prueba dedicado, etc. no tiene sentido hacer nada más que la opción 1.
Un gran recurso adicional al respecto es el work de los guardabosques de ALM.
¿Cómo es este fuera de tema para SO? No me puedo imaginar que esto sea una mejor opción para nuestro sitio hermano de programadores. –