Referencia de packages.config

El archivo packages.config se usa en algunos tipos de proyecto para mantener la lista de paquetes a los que hace referencia el proyecto. Esto permite que NuGet restaure fácilmente las dependencias del proyecto cuando el proyecto se debe transportar a otro equipo (por ejemplo, a un servidor de compilación) sin todos estos paquetes.

Si se usa, packages.config debe encontrarse en una raíz del proyecto. Se crea automáticamente cuando se ejecuta la primera operación de NuGet, pero también se puede crear manualmente antes de ejecutar comandos como nuget restore.

Los proyectos que usan PackageReference no usan packages.config.

Esquema

El esquema es sencillo: a continuación del encabezado XML estándar hay un nodo <packages> que contiene uno o varios elementos <package>, uno para cada referencia. Cada elemento <package> puede tener los siguientes atributos:

Atributo Obligatorio Descripción
id Identificador del paquete, como Newtonsoft.json o Microsoft.AspNet.Mvc.
version Versión exacta del paquete que se va a instalar (por ejemplo, 3.1.1 o 4.2.5.11-beta). Una cadena de versión debe tener al menos tres números; un cuarto es opcional, ya que se trata de un sufijo de versión preliminar. No se admiten intervalos.
targetFramework No Moniker de la versión de .NET Framework de destino (TFM) que se va a aplicar al instalar el paquete. Se establece inicialmente en el destino del proyecto cuando se instala un paquete. Como resultado, puede haber distintos elementos <package> que tengan TFM diferentes. Por ejemplo, si crea un proyecto destinado a .NET 4.5.2, los paquetes instalados en ese punto usarán el TFM de net452. Si más adelante redestina el proyecto a .NET 4.6 y agrega más paquetes, usarán el TFM de net46. Si hay discrepancias entre el destino del proyecto y los atributos targetFramework, se generarán advertencias, en cuyo caso puede volver a instalar los paquetes afectados.
allowedVersions No Se aplicó un intervalo de versiones admitidas para este paquete durante la actualización del paquete (vea Restricciones de las versiones de actualización). No afecta al paquete que se instala durante una operación de instalación o de restauración. Vea Package versioning (Control de versiones de paquetes) para consultar la sintaxis. La interfaz de usuario del administrador de paquetes también deshabilita todas las versiones que se encuentren fuera del intervalo permitido.
developmentDependency No Si el proyecto de consumo en cuestión crea un paquete de NuGet, el hecho de establecerlo en true para una dependencia impide que ese paquete se incluya cuando se cree el paquete de consumo. El valor predeterminado es false.

Ejemplos

El siguiente archivo packages.config hace referencia a dos dependencias:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="jQuery" version="3.1.1" targetFramework="net46" />
  <package id="NLog" version="4.3.10" targetFramework="net46" />
</packages>

El siguiente archivo packages.config hace referencia a nueve paquetes, pero Microsoft.Net.Compilers no se incluirá al crear el paquete de consumo debido al atributo developmentDependency. La referencia al archivo Newtonsoft.Json también restringe las actualizaciones únicamente a las versiones 8.x y 9.x.

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net46" />
  <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net46" developmentDependency="true" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Microsoft.Web.Xdt" version="2.1.1" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="8.0.3" allowedVersions="[8,10)" targetFramework="net46" />
  <package id="NuGet.Core" version="2.11.1" targetFramework="net46" />
  <package id="NuGet.Server" version="2.11.2" targetFramework="net46" />
  <package id="RouteMagic" version="1.3" targetFramework="net46" />
  <package id="WebActivatorEx" version="2.1.0" targetFramework="net46" />
</packages>