Cuando fui a averiguar si Chris B había creado un problema NuGet para esto, no pude t encuentra uno. EDITAR: lo hizo, ver su comentario a continuación. Pero encontré una característica semi-documentada de NuGet que he utilizado para resolver este problema: Allow specifying the folder where packages are installed
Déjame romper esta pregunta en 2 temas:
- conseguir NuGet para permitir múltiples soluciones para utilizar los mismos paquetes de ubicación
- conseguir los paquetes NuGet a buscar automágicamente de control de código fuente cuando se incluye un proyecto que tiene paquetes NuGet
Problema 1: Por defecto NuGet paquete de tiendas s en una carpeta de paquetes en la carpeta de la solución. Para cambiar esa ubicación, cree un archivo nuget.config en la carpeta raíz de la solución con el siguiente contenido:
<settings>
<repositoryPath>..\..\..\Utilities\Library\nuget.packages</repositoryPath>
</settings>
<repositoryPath>
es relativo a su solución; así que obviamente hazlo como quieras. Haga que cada solución tenga su propia ruta relativa a la misma carpeta de paquetes.
En cuanto al flujo de NuGet, a partir de ese punto, las rutas en repositories.config son relativas a la carpeta que contiene repositories.config, no la solución, por lo que ahora todos los proyectos/paquetes se gestionan independientemente de la ubicación de la solución.
Esto permite que múltiples soluciones utilicen los mismos paquetes en control de fuente, y si esas soluciones usan los mismos proyectos (que usan paquetes NuGet), esas soluciones/proyectos se mantendrán sincronizados sin importar qué solución actualice el paquete.
Problema 1 completamente resuelto.
Problema 2:
permítanme abordar esto desde 2 perspectivas. Esto se aplica a Visual Studio y TFS: dejaré el SVN para que lo dirija otra persona.
Primero: si no tiene un código fuente en su disco y obtiene una solución (no es un proyecto), prefiero hacerlo para que pueda obtener todo lo que la solución necesita para construir. No debería haber referencias faltantes para ir a agarrar manualmente. Todo lo que podemos hacer es agregar los archivos del paquete como elementos de solución. Sí, en cada solución. Un poco de trabajo, sí, pero cuando termine, los archivos del paquete buscarán/actualizarán desde el control de origen automágicamente.
Segundo: en una nueva solución, cuando incluye un proyecto de control de fuente existente que tiene paquetes NuGet, tiene que obtener manualmente los paquetes del control de origen y agregarlos como elementos de solución. Al menos cualquier otra persona que obtenga su solución en el futuro obtendrá automágicamente todo lo que necesita para construir con éxito. Al menos con VS/TFS, así es como es, AFAIK. Si projB depende de projA, y agrega projB a una nueva solución, VS/TFS no tomará automáticamente projA de TFS. Tienes que hacer eso manualmente. Entonces, lo mismo ocurre con las referencias dll (como paquetes NuGet).
Resumen de mi solución:
- Sólo una copia de los paquetes de control de código fuente para todas las soluciones
- Cualquier solución puede actualizar paquetes y todas las otras soluciones se mantienen sincronizados *
* Una vez que una solución actualiza paquetes a nuevas rutas o nombres de archivos, aparecerán como referencias faltantes a las otras soluciones y deberá limpiarlas manualmente. Pero al menos sabes exactamente dónde están los paquetes en control de fuente "(a diferencia de la ubicación RandomSolution \ packages)."
Gracias - como solución alternativa, simplemente cambié las dependencias de los paquetes NuGet también en un servidor interno, y la resolución de dependencia integrada la hace "funcionar". No es ideal, sin embargo. Seguiré con el rastreador de problemas. –