Una solución escalable es hacer svn-external en el directorio solución para que sus proyectos importados aparecen en paralelo a su otro proyecto s. Las razones para esto se dan a continuación.
Uso de un subdirectorio separado para proyectos "importados", p. externals
, a través de svn-external parece una buena idea hasta que tenga dependencias no triviales entre proyectos. Por ejemplo, supongamos que un proyecto depende de proyecto en proyecto B y B proyecto en proyecto C. Si usted entonces tiene una solución de S con el proyecto A, que va a terminar con la siguiente estructura de directorios:
# BAD SOLUTION #
S
+---S.sln
+---A
| \---A.csproj
\---externals
+---B <--- A's dependency
| \---B.csproj
\---externals
\---C <--- B's dependency
\---C.csproj
Usando esta técnica, , incluso puede terminar teniendo múltiples copias de un solo proyecto en su árbol. Esto claramente no es lo que quieres.
Además, si sus proyectos usan dependencias NuGet, normalmente se cargan dentro del directorio de nivel superior packages
. Esto significa que referencias NuGet de proyectos dentro del subdirectorio externals
se romperán.
Además, si se utiliza Git además de SVN, un método recomendado para el seguimiento de cambios es tener un repositorio Git separado para cada proyecto, y luego un repositorio Git separado para la solución que utiliza git submodule
de los proyectos dentro. Si un submódulo Git no es un subdirectorio inmediato del módulo principal, entonces el comando del submódulo Git creará un clon que es un subdirectorio inmediato.
Otra ventaja de tener todos los proyectos en la misma capa es que puedes crear una "super-solución" que contenga proyectos de todas tus soluciones (rastreado a través de Git o svn-external), que a su vez te permite a compruebe con una sola solución: reconstruya que cualquier cambio que haya realizado en un solo proyecto sea coherente con todos los demás proyectos.
# GOOD SOLUTION #
S
+---S.sln
+---A
| \---A.csproj
+---B <--- A's dependency
| \---B.csproj
\---C <--- B's dependency
\---C.csproj
Me gusta este enfoque, tendré que leer más acerca de los externos. Supongo que puede cambiar todo y comprometerse con el repositorio correcto cuando haya terminado. El marco es muy joven (recientemente nos dimos cuenta de que estábamos escribiendo el mismo código por todas partes) por lo que poder hacer cambios rápidos es uno de los primeros en la lista de prioridades. También es importante asegurarse de que esos cambios no rompan todo lo demás. –