source change .net visual-studio nuget nuget-package

.net - change - ¿Es posible cambiar la ubicación de los paquetes para NuGet?



nuget config precedence (13)

  1. Creó un archivo llamado "nuget.config".
  2. Agregué ese archivo a mi carpeta de soluciones

Esto no funcionó para mí:

<configuration> <config> <add key="repositoryPath" value="../ExtLibs/Packages" /> </config> ... </configuration>

esto funciono para mi

<?xml version="1.0" encoding="utf-8"?> <settings> <repositoryPath>../ExtLibs/Packages</repositoryPath> </settings>

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á que no guardo bibliotecas externas dentro de la carpeta de origen. También estoy muy interesado en usar NuGet pero no quiero estas bibliotecas externas dentro de la carpeta de origen. ¿Tiene NuGet una configuración para cambiar el directorio en el que se cargan todos los paquetes?


Acabo de actualizar con Nuget 2.8.3. Para cambiar la ubicación de los paquetes instalados, habilité la restauración de paquetes desde la solución de clic derecho. Edité NuGet.Config y añadí estas líneas:

<config> <add key="repositorypath" value="../Core/Packages" /> </config>

Luego, reconstruyó la solución, descargó todos los paquetes a mi carpeta deseada y actualizó las referencias automáticamente.


Además de la respuesta de Shane Kms, si ha activado la Restauración de paquetes Nuget, edite el archivo NuGet.config ubicado en la carpeta .nuget de la siguiente manera:

<?xml version="1.0" encoding="utf-8"?> <configuration> <repositoryPath>../../ExtLibs/Packages</repositoryPath> </configuration>

Observe el extra ".. /", ya que retrocede desde la carpeta .nuget y no desde la carpeta de la solución.


Ahora es posible controlar en qué carpeta están instalados los paquetes.

http://nuget.codeplex.com/workitem/215

Edición: vea el comentario de Phil Haack el 10 de diciembre de 2010 a las 11:45 PM (en el elemento de trabajo / el enlace de arriba). El soporte se implementa parcialmente en 1.0, pero no está documentado.

De acuerdo con @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 hay documentación oficial sobre cómo controlar las ubicaciones de los paquetes. Las notas de la versión para 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 colocó el archivo (solución si lo 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.


De acuerdo, por el bien de cualquier otra persona que lea este post, esto es lo que entiendo de la gran cantidad de respuestas anteriores:

  1. 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 ''../Packages'' que lo colocará donde siempre saldrá de la caja. Como @ bruce14 indica que debe hacer ''../../paquetes'' en su lugar

  2. No pude obtener el último nuget (2.8.5) para encontrar una carpeta de paquetes fuera de la ubicación estándar sin habilitar la restauración del paquete. Entonces, una vez que habilite la restauración de paquetes, 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>

  3. (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 / volver a cargar la solución para que los cambios surtan efecto.


El archivo de configuración en la respuesta aceptada funciona para mí en VS2012. Sin embargo, para mí solo funciona cuando hago lo siguiente:

  1. Crear un nuevo proyecto en VS.
  2. Salir VS - esto parece ser importante.
  3. Copie los archivos de configuración a la carpeta del proyecto.
  4. Reinicie VS y agregue paquetes.

Si sigo esos pasos puedo usar una carpeta de paquete compartido.


La forma más coherente es mediante la utilización de nuget config para nuget config correctamente la configuración:

nuget config -set repositoryPath=c:/packages -configfile c:/my.config

here


La solución propuesta en las notas de la versión 2.1 no funciona de manera inmediata. Se olvidaron de mencionar que hay código:

internal string ResolveInstallPath() { if (!string.IsNullOrEmpty(this.OutputDirectory)) { return this.OutputDirectory; } ISettings settings = this._configSettings; ... }

lo que le impide trabajar. Para solucionar esto, necesita modificar su archivo NuGet.targets y eliminar el parámetro ''OutputDirectory'':

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch)</RestoreCommand>

Entonces, si agrega la configuración ''repositoryPath'' en algún lugar de 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), restaurará todos los paquetes en una sola ubicación, pero ... Su .csproj aún contiene sugerencias para ensamblajes escritos como rutas relativas ...

Todavía no entiendo por qué fueron tan difíciles en lugar de cambiar el PackageManager, por lo que agregaría pistas de pistas relacionadas con PackagesDir. Así es como lo hago manualmente para tener diferentes ubicaciones de paquetes localmente (en mi escritorio) y en el agente de compilación.

<Reference Include="Autofac.Configuration, Version=2.6.3.862, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL"> <Private>True</Private> <HintPath>$(PackagesDir)/Autofac.2.6.3.862/lib/NET40/Autofac.Configuration.dll</HintPath> </Reference>


Ninguna de estas respuestas funcionó para mí (Nuget 2.8.6) porque faltaron algunos consejos, intentaré agregarlos aquí, ya que podría ser útil para otros.

Después de leer las siguientes fuentes:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Parece que

  1. Para hacer que el paquete de instalación funcione correctamente con un repositoryPath diferente, debe usar barras diagonales hacia delante , es porque están utilizando el objeto Uri para analizar la ubicación.
  2. Sin $ en el principio todavía estaba ignorando mi configuración.
  3. NuGet almacena en caché el archivo de configuración, por lo que, después de las modificaciones, debe volver a cargar la solución / VS.
  4. También tuve un problema extraño al usar el comando NuGet.exe para configurar esta opción, ya que modificó mi NuGet.exe global en AppData / Roaming / NuGet y comenzó a restaurar paquetes allí (ya que ese archivo tiene una mayor prioridad, solo adivinando).

P.ej

<?xml version="1.0" encoding="utf-8"?> <configuration> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> <config> <add key="repositorypath" value="$/../../../Common/packages" /> </config> </configuration>

También puede usar el comando NuGet para asegurarse de que la sintaxis sea correcta de esta manera:

NuGet.exe config -Set repositoryPath=$/../../../Common/packages -ConfigFile NuGet.Config


Para los proyectos .NET Core y Visual Studio 2017, pude restaurar todos los paquetes a una ruta relativa al proporcionar esta configuración:

<configuration> <config> <add key="globalPackagesFolder" value="lib" /> </config> ... </configuration>

Según mi experiencia, la carpeta lib se creó en el mismo nivel donde se encontró Nuget.config, sin importar dónde se encuentre el archivo sln. Probé y el comportamiento es el mismo para la restauración de dotnet de la línea de comandos y la reconstrucción de Visual Studio 2017


Una pequeña chorrita más que acabo de descubrir. (Esto puede ser tan básico que algunos no lo han mencionado, pero fue importante para mi solución). La carpeta "paquetes" termina en la misma carpeta que su archivo .sln.

Movimos nuestro archivo .sln y luego arreglamos todos los caminos para encontrar los diferentes proyectos y ¡listo! Nuestra carpeta de paquetes terminó donde la queríamos.


Una solución para Nuget 3.2 en Visual Studio 2015 es:

<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositoryPath" value="../lib" /> </config> </configuration>

Usando barra diagonal para la carpeta principal. Guarde el archivo anterior (nuget.config) en la carpeta de la solución.

La referencia está disponible here


ACTUALIZACIÓN para VS 2017:

Parece que las personas en el equipo de Nuget finalmente comenzaron a usar a Nuget, lo que les ayudó a encontrar y arreglar varias cosas importantes. Así que ahora (si no me equivoco, ya que todavía no migré a VS 2017) ya no es necesario lo siguiente. Debería poder establecer "repositoryPath" en una carpeta local y funcionará. Incluso puede dejarlo en absoluto, ya que, por defecto, la ubicación de restauración se trasladó de las carpetas de soluciones al nivel de la máquina. Otra vez - todavía no lo probé por mi cuenta

VS 2015 y anteriores

Solo un consejo para otras respuestas (específicamente this ):

La ubicación de la carpeta del paquete NuGet se puede cambiar a través de la configuración, pero VisualStudio aún hace referencia a los ensamblajes en esta carpeta relativamente:

<HintPath>../../../../../../SomeAssembly/lib/net45/SomeAssembly.dll</HintPath>

Para solucionar esto (hasta una mejor solución) usé el comando subst para crear un controlador virtual que apunta a una nueva ubicación de la carpeta de Paquetes:

subst N: C:/Development/NuGet/Packages

Ahora, al agregar un nuevo paquete NuGet, la referencia del proyecto usa su ubicación absoluta:

<HintPath>N:/SomeAssembly/lib/net45/SomeAssembly.dll</HintPath>

Nota:

  1. Un controlador virtual de este tipo se eliminará después del reinicio, así que asegúrese de manejarlo
  2. No te olvides de reemplazar las referencias existentes en los archivos del proyecto.