¿Es posible cambiar la ubicación de los paquetes de NuGet?
Tengo la siguiente convención para la mayoría de mis proyectos:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Notarás que no mantengo bibliotecas externas dentro de la carpeta de origen. También estoy muy interesado en usar NuGet pero no quiero que estas bibliotecas externas estén dentro de la carpeta de origen. ¿NuGet tiene una configuración para cambiar el directorio en el que se cargan todos los paquetes?
Ahora es posible controlar en qué carpeta se instalan los paquetes.
http://nuget.codeplex.com/workitem/215
Editar: vea el comentario de Phil Haack el 10 de diciembre de 2010 a las 11:45 p.m. (en el elemento de trabajo/en el enlace de arriba). El soporte está parcialmente implementado en 1.0, pero no está documentado.
Según @dfowler: agregue un archivo nuget.config junto a la solución con esto:
<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>
Hay un paquete nuget para crear la anulación de la carpeta del paquete.
Actualización para la versión 2.1
Como comentó Azat, ahora existe documentación oficial sobre cómo controlar las ubicaciones de los paquetes. Las notas de la versión 2.1 especifican la siguiente configuración en un archivo nuget.config (consulte las notas de la versión para obtener una descripción de los lugares válidos para colocar los archivos de configuración y cómo funciona el modelo de configuración jerárquica):
<configuration>
<config>
<add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
</config>
...
</configuration>
Esto cambiaría la carpeta de paquetes para el nivel de configuración en el que coloca el archivo (solución si la coloca en el directorio de la solución, proyecto en el directorio del proyecto, etc.). Tenga en cuenta que las notas de la versión indican:
[...] si tiene una carpeta de paquetes existente debajo de la raíz de su solución, deberá eliminarla antes de que NuGet coloque los paquetes en la nueva ubicación.
- Creó un archivo llamado "nuget.config".
- Agregué ese archivo a mi carpeta de soluciones.
Esto no funcionó para mí:
<configuration>
<config>
<add key="repositoryPath" value="..\ExtLibs\Packages" />
</config>
...
</configuration>
esto FUNCIONÓ para mí:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<repositoryPath>..\ExtLibs\Packages</repositoryPath>
</settings>
Bien, por el bien de cualquiera que lea esta publicación: esto es lo que entiendo de la gran cantidad de respuestas anteriores:
El archivo nuget.config en la carpeta .nuget es relativo a esa carpeta. Esto es importante porque si su nueva carpeta es algo así como '../Paquetes', la colocará donde siempre aparece de fábrica. Como dice @bruce14, debes hacer '../../Packages' en su lugar
No pude hacer que la última versión de Nuget (2.8.5) encontrara una carpeta de paquetes fuera de la ubicación estándar sin habilitar la restauración de paquetes. Entonces, una vez que habilite la restauración del paquete, se debe agregar lo siguiente al archivo nuget.config dentro de la carpeta .nuget para cambiar la ubicación:
<?xml version="1.0" encoding="utf-8"?> <configuration> ... <config> <add key="repositoryPath" value="..\..\Packages" /> </config> ... </configuration>
(Esto es importante) Si realiza CUALQUIER cambio en la ubicación de la carpeta del paquete dentro de los archivos nuget.config, debe reiniciar Visual Studio o cerrar/recargar la solución para que los cambios surtan efecto.