Compartir por


Referencia nuget.config

El comportamiento de NuGet se controla mediante valores de diferentes archivos NuGet.Config o nuget.config, como se describe en Configuraciones comunes de NuGet.

nuget.config es un archivo XML que contiene un nodo <configuration> de nivel superior, que contiene los elementos de sección que se describen en este tema. Cada sección contiene cero o más elementos. Vea el archivo de configuración de ejemplo. Los nombres de opción distinguen mayúsculas de minúsculas, y los valores pueden usar variables de entorno.

Sugerencia

Agregue un archivo nuget.config en la raíz del repositorio del proyecto. Esto se considera un procedimiento recomendado, ya que promueve la repetibilidad y garantiza que distintos usuarios tengan la misma configuración de NuGet. Es posible que tenga que configurar elementos clear para asegurarse de que no se aplica ninguna configuración específica del usuario o de la máquina. Más información sobre cómo se aplica la configuración.

Sección config

Contiene varios valores de configuración, que se pueden establecer mediante el comando nuget config.

dependencyVersion y repositoryPath solo se aplican a proyectos en los que se usa packages.config. globalPackagesFolder solo se aplica a proyectos en los que se usa el formato PackageReference.

Key Value
dependencyVersion (solo packages.config) El valor predeterminado DependencyVersion para la instalación, restauración y actualización del paquete, cuando no se especifica directamente el modificador -DependencyVersion. Este valor también se usa en la interfaz de usuario del Administrador de paquetes NuGet. Los valores son Lowest, HighestPatch, HighestMinor, Highest.
globalPackagesFolder La ubicación de la carpeta de paquetes global predeterminada. El valor predeterminado es %userprofile%\.nuget\packages (Windows) o ~/.nuget/packages (Mac o Linux). Se puede usar una ruta de acceso relativa en archivos nuget.config específicos del proyecto. Este valor se invalida mediante la variable de entorno NUGET_PACKAGES, que tiene prioridad.
repositoryPath (solo packages.config) La ubicación en la que se van a instalar los paquetes NuGet en lugar de la carpeta $(Solutiondir)/packages predeterminada. Se puede usar una ruta de acceso relativa en archivos nuget.config específicos del proyecto.
defaultPushSource Identifica la dirección URL o ruta de acceso de origen del paquete que se debe usar como valor predeterminado si no se encuentra ningún otro origen del paquete para una operación.
http_proxy http_proxy.user http_proxy.password no_proxy Configuración de proxy que se usa al conectarse a orígenes de paquetes; http_proxy debe tener el formato http://<username>:<password>@<domain>. Las contraseñas están cifradas y no se pueden agregar de forma manual. Para no_proxy, el valor es una lista separada por comas de dominios que omiten el servidor proxy. Como alternativa, puede usar las variables de entorno http_proxy y no_proxy para esos valores. Para obtener más información, vea Configuración de proxy de NuGet (skolima.blogspot.com).
maxHttpRequestsPerSource Controla el número máximo de solicitudes paralelas enviadas desde NuGet a cada origen de paquete para la resolución y descargas de dependencias de paquetes. El valor predeterminado en dotnet.exe es Int32.MaxValue, que se deriva de la propiedad HttpClientHandler.MaxConnectionsPerServer. Este valor no afecta a dotnet.exe para Mac OS, porque el límite de limitación está establecido en 16 para evitar demasiados errores de archivos abiertos. El valor predeterminado para NuGet client tools que se ejecuta en .NET Framework, como Visual Studio y nuget.exe es 64 en Windows y 1 en Mono. El valor predeterminado de los proyectos de estilo Packages.config se establece en Environment.ProcessorCount. La configuración de la propiedad maxHttpRequestsPerSource en un valor menor que el predeterminado podría afectar al rendimiento de NuGet.
signatureValidationMode Especifica el modo de validación que se usa para comprobar las firmas de paquete para la instalación del paquete y la restauración. Los valores son accept, require. Tiene como valor predeterminado accept.

Ejemplo:

<config>
    <add key="dependencyVersion" value="Highest" />
    <add key="globalPackagesFolder" value="c:\packages" />
    <add key="repositoryPath" value="c:\installed_packages" />
    <add key="http_proxy" value="http://company-squid:3128@contoso.com" />
    <add key="signatureValidationMode" value="require" />
    <add key="maxHttpRequestsPerSource" value="16" />
</config>

Sección bindingRedirects

Configura si NuGet realiza redirecciones de enlaces automáticas cuando se instala un paquete.

Key Value
skip Un valor booleano que indica si se omiten las redirecciones de enlaces automáticas. El valor predeterminado es false.

Ejemplo:

<bindingRedirects>
    <add key="skip" value="True" />
</bindingRedirects>

Sección packageRestore

Controla la restauración del paquete durante las compilaciones.

Key Value
enabled Un valor booleano que indica si NuGet puede realizar la restauración automática. También se puede establecer la variable de entorno EnableNuGetPackageRestore con un valor de True en lugar de establecer esta clave en el archivo de configuración.
automatic Un valor booleano que indica si NuGet debe comprobar los paquetes que faltan durante una compilación.

Ejemplo:

<packageRestore>
    <add key="enabled" value="true" />
    <add key="automatic" value="true" />
</packageRestore>

Sección solution

Controla si la carpeta packages de una solución se incluye en el control de código fuente. En esta sección solo funciona en los archivos nuget.config de la carpeta de una solución.

Key Value
disableSourceControlIntegration Un valor booleano que indica si se debe ignorar la carpeta de paquetes cuando se trabaja con el control de código fuente. El valor predeterminado es falso.

Ejemplo:

<solution>
    <add key="disableSourceControlIntegration" value="true" />
</solution>

Secciones de origen del paquete

packageSources, packageSourceCredentials, apikeys, activePackageSource, disabledPackageSources, trustedSigners y packageSourceMapping trabajan de manera conjunta para configurar el funcionamiento de NuGet con repositorios de paquetes durante las operaciones de instalación, restauración y actualización.

Normalmente se usa el comando nuget sources para administrar estos valores, excepto para apikeys que se administra con el comando nuget setapikey, y trustedSigners, que se administra con el comando nuget trusted-signers.

Tenga en cuenta que la dirección URL de origen de nuget.org es https://api.nuget.org/v3/index.json.

packageSources

Enumera todos los orígenes de paquetes conocidos. El orden se omite durante las operaciones de restauración y con cualquier proyecto que use el formato PackageReference. NuGet respeta el orden de los orígenes para las operaciones de instalación y actualización con proyectos que usen packages.config.

Atributo XML Fin
Clave (nombre para asignar al origen del paquete)
Valor La ruta de acceso o dirección URL del origen del paquete.
protocolVersion Versión del protocolo de servidor NuGet que se va a usar. La versión actual es "3". El valor predeterminado es la versión "2" cuando no apunta a una dirección URL de origen del paquete que termina en .json (por ejemplo, https://api.nuget.org/v3/index.json). Compatible con NuGet 3.0 y versiones posteriores. Vea API de servidor NuGet para más información sobre el protocolo de la versión 3.
allowInsecureConnections Cuando es false o no se especifica, NuGet emitirá una advertencia cuando el origen use http, en lugar de https. Si está seguro de que la comunicación con este origen nunca estará en riesgo de ataques de interceptación, puede establecer el valor en true para suprimir la advertencia. Compatible con NuGet 6.8 y versiones posteriores.
disableTLSCertificateValidation Esta propiedad de configuración permite deshabilitar la validación de certificados SSL/TLS para el servidor HTTPS. Cuando se establece como true, el servidor omitirá los errores relacionados con los certificados SSL/TLS, como certificados expirados o autofirmados, y establecerá la conexión sin validación. Compatible con NuGet 6.11 y versiones posteriores.

Ejemplo:

<packageSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Contoso" value="https://contoso.com/packages/" />
    <add key="http-source" value="http://httpsourcetrusted/" allowInsecureConnections="true" />
    <add key="Invalid-certificate-https-source" value="https://httpsSourceTrusted/" disableTLSCertificateValidation="true" />
    <add key="Test Source" value="c:\packages" />
</packageSources>

Nota:

Utilice orígenes de paquetes fiables.

Nota:

Al usar la CLI, puede expresar una propiedad RestoreSources de MSBuild o de la --source(CLI de .NET) | -Source(CLI de NuGet) para invalidar el valor <packageSources> definido en NuGet.config.

Sugerencia

Cuando <clear /> está presente para un nodo determinado, NuGet ignora los valores de configuración definidos previamente para ese nodo. Más información sobre cómo se aplica la configuración.

auditSources

Enumera todos los orígenes de auditoría conocidos, los cuales NuGet Audit usará durante la restauración. Si no se proporcionan orígenes de auditoría, la restauración utilizará orígenes de paquetes y suprimirá NU1905. auditSources se agregó a NuGet 6.12.

Los orígenes de auditoría admiten los mismos atributos que packageSources (protocolVersion y allowInsecureConnections) y los orígenes que requieren autenticación se configuran con packageSourceCredentials, de la misma manera que packageSources.

Ejemplo:

<auditSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</auditSources>

packageSourceCredentials

Almacena nombres de usuario y contraseñas para los orígenes, normalmente especificados con los modificadores -username y -password con nuget sources. Las contraseñas se cifran de forma predeterminada a menos que también se use la opción -storepasswordincleartext. Opcionalmente, se pueden especificar tipos de autenticación válidos con el modificador -validauthenticationtypes.

Key Value
username El nombre de usuario para el origen en texto sin formato. Nota: Las variables de entorno se pueden usar para mejorar la seguridad.
password La contraseña cifrada para el origen. Las contraseñas cifradas solo se admiten en Windows y solo se pueden descifrar cuando se usan en la misma máquina y mediante el mismo usuario que el cifrado original.
cleartextpassword La contraseña no cifrada para el origen. Nota: Las variables de entorno se pueden usar para mejorar la seguridad.
validauthenticationtypes Lista separada por comas de tipos de autenticación válidos para este origen. Establézcalo en basic si el servidor anuncia NTLM o Negotiate y las credenciales deben enviarse mediante el mecanismo básico, por ejemplo, cuando se usa una instancia de PAT con Azure DevOps Server local. Otros valores válidos son negotiate, kerberos, ntlm y digest, pero es poco probable que estos valores sean útiles.

Advertencia

No se recomienda almacenar contraseñas en texto no cifrado. Tenga en cuenta que las contraseñas cifradas solo se admiten en Windows. Además, solo se pueden descifrar cuando se usan en el mismo equipo y por el mismo usuario que las cifró originalmente. Para obtener más información sobre cómo administrar credenciales de forma segura, consulte los procedimientos recomendados de seguridad para consumir paquetes de fuentes privadas.

Sugerencia

Si se pasa una contraseña no cifrada para password, aparecerá el mensaje de error "El parámetro es incorrecto".

Ejemplo:

En el archivo de configuración, el elemento <packageSourceCredentials> contiene nodos secundarios para cada nombre de origen aplicable (los espacios en el nombre se reemplazan por _x0020_). Es decir, para los orígenes denominados "Contoso" y "Test Source", el archivo de configuración contiene lo siguiente cuando se usan contraseñas cifradas:

<packageSourceCredentials>
    <Contoso>
        <add key="Username" value="user@contoso.com" />
        <add key="Password" value="..." />
    </Contoso>
    <Test_x0020_Source>
        <add key="Username" value="user" />
        <add key="Password" value="..." />
    </Test_x0020_Source>
</packageSourceCredentials>

Además, se pueden proporcionar métodos de autenticación válidos.

<packageSourceCredentials>
    <Contoso>
        <add key="Username" value="user@contoso.com" />
        <add key="Password" value="..." />
        <add key="ValidAuthenticationTypes" value="basic" />
    </Contoso>
    <Test_x0020_Source>
        <add key="Username" value="user" />
        <add key="Password" value="..." />
        <add key="ValidAuthenticationTypes" value="basic, negotiate" />
    </Test_x0020_Source>
</packageSourceCredentials>

Al usar contraseñas sin cifrar almacenadas en una variable de entorno:

<packageSourceCredentials>
    <Contoso>
        <add key="Username" value="user@contoso.com" />
        <add key="ClearTextPassword" value="%ContosoPassword%" />
    </Contoso>
    <Test_x0020_Source>
        <add key="Username" value="user" />
        <add key="ClearTextPassword" value="%TestSourcePassword%" />
    </Test_x0020_Source>
</packageSourceCredentials>

Cuando se usan contraseñas sin cifrar:

Advertencia

No se recomienda almacenar contraseñas en texto no cifrado.

<packageSourceCredentials>
    <Contoso>
        <add key="Username" value="user@contoso.com" />
        <add key="ClearTextPassword" value="33f!!lloppa" />
    </Contoso>
    <Test_x0020_Source>
        <add key="Username" value="user" />
        <add key="ClearTextPassword" value="hal+9ooo_da!sY" />
    </Test_x0020_Source>
</packageSourceCredentials>

apikeys

Almacena claves para los orígenes en los que se usa autenticación de clave de API, como se establece mediante el comando nuget setapikey.

Key Value
(dirección URL de origen) La clave de API cifrada.

Ejemplo:

<apikeys>
    <add key="https://MyRepo/ES/api/v2/package" value="encrypted_api_key" />
</apikeys>

disabledPackageSources

Orígenes actualmente deshabilitados identificados. Puede estar vacío. A menos que se deshabiliten orígenes específicos en esta sección, están habilitados.

Key Value
(nombre del origen) Un valor booleano que indica si el origen está deshabilitado.

Ejemplo:

<disabledPackageSources>
    <add key="Contoso" value="true" />
</disabledPackageSources>

<!-- Empty list -->
<disabledPackageSources />

En el ejemplo anterior, el origen del paquete Contoso está deshabilitado y no se usará para descargar o instalar paquetes.

activePackageSource

(solo para 2.x; en desuso en 3.x y versiones posteriores)

Identifica al origen actualmente activo o indica la suma de todos los orígenes.

Key Value
(nombre del origen) o All Si la clave es el nombre de un origen, el valor es la ruta de acceso o la dirección URL del origen. Si es All, el valor debe ser (Aggregate source) para combinar todos los orígenes de paquetes que no estén deshabilitados.

Ejemplo:

<activePackageSource>
    <!-- Only one active source-->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />

    <!-- All non-disabled sources are active -->
    <add key="All" value="(Aggregate source)" />
</activePackageSource>

Sección trustedSigners

Almacena firmantes de confianza usados para permitir el paquete durante la instalación o la restauración. Esta lista no puede estar vacía cuando el usuario establece signatureValidationMode en require.

Esta sección se puede actualizar con el comando nuget trusted-signers.

Esquema:

Un firmante de confianza tiene una colección de elementos certificate que inscriben todos los certificados que identifican un firmante determinado. Un firmante de confianza puede ser Author o Repository.

Un repositorio de confianza también especifica serviceIndex para el repositorio (que tiene que ser un URI https válido) y, opcionalmente, puede especificar una lista delimitada por punto y coma de elementos owners para restringir aún más en quién se confía en ese repositorio específico.

Los algoritmos hash admitidos que se usan para una huella digital de certificado son SHA256 y SHA384 SHA512.

Si certificate especifica allowUntrustedRoot como true, el certificado especificado se puede encadenar a una raíz que no es de confianza mientras se crea la cadena de certificados como parte de la comprobación de la firma.

Ejemplo:

<trustedSigners>
    <author name="microsoft">
        <certificate fingerprint="3F9001EA83C560D712C24CF213C3D312CB3BFF51EE89435D3430BD06B5D0EECE" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
        <certificate fingerprint="AA12DA22A49BCE7D5C1AE64CC1F3D892F150DA76140F210ABD2CBFFCA2C18A27" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
        <certificate fingerprint="566A31882BE208BE4422F7CFD66ED09F5D4524A5994F50CCC8B05EC0528C1353" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
    </author>
    <repository name="nuget.org" serviceIndex="https://api.nuget.org/v3/index.json">
        <certificate fingerprint="0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
        <certificate fingerprint="5A2901D6ADA3D18260B9C6DFE2133C95D74B9EEF6AE0E5DC334C8454D1477DF4" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
        <certificate fingerprint="1F4B311D9ACC115C8DC8018B5A49E00FCE6DA8E2855F9F014CA6F34570BC482D" hashAlgorithm="SHA256" allowUntrustedRoot="false" />        
        <owners>microsoft;aspnet;nuget</owners>
    </repository>
</trustedSigners>

Sección fallbackPackageFolders

(3.5+) Proporciona una manera de preinstalar paquetes para que no sea necesario realizar ningún trabajo si el paquete se encuentra en las carpetas de reserva. Las carpetas de paquete de reserva tienen exactamente la misma estructura de carpetas y archivos que la carpeta del paquete global: .nupkg está presente y se extraen todos los archivos.

La lógica de búsqueda de esta configuración es la siguiente:

  • Se busca en la carpeta global del paquete para ver si el paquete o la versión ya están descargados.

  • Se busca en las carpetas de reserva una coincidencia del paquete o la versión.

Si alguna de las búsquedas es correcta, no es necesaria ninguna descarga.

Si no se encuentra una coincidencia, NuGet comprueba los orígenes de archivos, después los orígenes http y, luego, descarga los paquetes.

Key Value
(nombre de la carpeta de reserva) Ruta de acceso a la carpeta de reserva.

Ejemplo:

<fallbackPackageFolders>
   <add key="XYZ Offline Packages" value="C:\somePath\someFolder\"/>
</fallbackPackageFolders>

Sección de asignación de origen del paquete

La sección packageSourceMapping contiene los detalles que ayudan a las operaciones del paquete NuGet a determinar de dónde se debe descargar un identificador de paquete.

Esta sección solo se puede administrar manualmente por el momento.

Una sección packageSourceMapping solo puede contener secciones packageSource.

packageSource

Subsección de la sección packageSourceMapping. Contiene una asignación para ayudar a NuGet a determinar si se debe tener en cuenta el origen para descargar el paquete de interés.

Clave
Nombre de un origen de paquete declarado en la sección packageSources. La clave debe coincidir exactamente con la clave del origen del paquete.

Las secciones packageSource de packageSourceMapping se identifican de forma única mediante key.

paquete

package forma parte de la sección packageSource.

Patrón
Patrón como se define en la sintaxis de asignación del origen del paquete.

Ejemplo:

<packageSourceMapping>
  <packageSource key="contoso.com">
    <package pattern="Contoso.*" />
  </packageSource>
</packageSourceMapping>

Sección packageManagement

Establece el formato de administración de paquetes predeterminado, ya sea packages.config o PackageReference. En los proyectos de estilo SDK siempre se usa PackageReference.

Key Value
format Valor booleano que indica el formato de administración de paquetes predeterminado. Si es 1, el formato es PackageReference. Si es 0, el formato es packages.config.
disabled Valor booleano que indica si se va a mostrar el mensaje para seleccionar un formato de paquete predeterminado en la primera instalación del paquete. False oculta el mensaje.

Ejemplo:

<packageManagement>
   <add key="format" value="1" />
   <add key="disabled" value="False" />
</packageManagement>

Sugerencia

Cuando <clear /> está presente para un nodo determinado, NuGet ignora los valores de configuración definidos previamente para ese nodo. Más información sobre cómo se aplica la configuración.

Uso de variables de entorno

Puede usar variables de entorno en valores nuget.config (NuGet 3.4 o versiones posteriores) para aplicar la configuración en tiempo de ejecución.

Por ejemplo, si la variable de entorno HOME en Windows se establece en c:\users\username, el valor de %HOME%\NuGetRepository en el archivo de configuración se resuelve como c:\users\username\NuGetRepository.

Tenga en cuenta que debe usar variables de entorno de estilo Windows (que empiezan y terminan con %) incluso en Mac/Linux. Tener $HOME/NuGetRepository en un archivo de configuración no se resolverá. En Mac/Linux, el valor de %HOME%/NuGetRepository se resolverá en /home/myStuff/NuGetRepository.

Si no se encuentra una variable de entorno, NuGet usa el valor literal del archivo de configuración. Por ejemplo %MY_UNDEFINED_VAR%/NuGetRepository se resolverá como path/to/current_working_dir/$MY_UNDEFINED_VAR/NuGetRepository

En la tabla siguiente se muestra la sintaxis de variables de entorno y la compatibilidad con el separador de ruta de acceso para los archivos NuGet.Config.

Compatibilidad con variables de entorno NuGet.Config

Sintaxis Separador de directorio Windows nuget.exe Windows dotnet.exe Mac nuget.exe (en Mono) Mac dotnet.exe
%MY_VAR% /
%MY_VAR% \ No N.º
$MY_VAR / N.º N.º N.º N.º
$MY_VAR \ N.º N.º N.º No

Archivo de configuración de ejemplo

A continuación se muestra un archivo nuget.config de ejemplo en el que se ilustran varios valores, incluidos los opcionales:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <config>
        <!--
            Used to specify the default location to expand packages.
            See: nuget.exe help install
            See: nuget.exe help update

            In this example, %PACKAGEHOME% is an environment variable.
            This syntax works on Windows/Mac/Linux
        -->
        <add key="repositoryPath" value="%PACKAGEHOME%/External" />

        <!--
            Used to specify default source for the push command.
            See: nuget.exe help push
        -->

        <add key="defaultPushSource" value="https://MyRepo/ES/api/v2/package" />

        <!-- Proxy settings -->
        <add key="http_proxy" value="host" />
        <add key="http_proxy.user" value="username" />
        <add key="http_proxy.password" value="encrypted_password" />
    </config>

    <packageRestore>
        <!-- Allow NuGet to download missing packages -->
        <add key="enabled" value="True" />

        <!-- Automatically check for missing packages during build in Visual Studio -->
        <add key="automatic" value="True" />
    </packageRestore>

    <!--
        Used to specify the default Sources for list, install and update.
        See: nuget.exe help list
        See: nuget.exe help install
        See: nuget.exe help update
    -->
    <packageSources>
        <clear />
        <add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
        <add key="MyRepo - ES" value="https://MyRepo/ES/nuget" />
    </packageSources>

    <!-- Used to store credentials -->
    <packageSourceCredentials />

    <!-- Used to disable package sources  -->
    <disabledPackageSources />

    <!--
        Used to specify default API key associated with sources.
        See: nuget.exe help setApiKey
        See: nuget.exe help push
        See: nuget.exe help mirror
    -->
    <apikeys>
        <add key="https://MyRepo/ES/api/v2/package" value="encrypted_api_key" />
    </apikeys>

    <!--
        Used to specify trusted signers to allow during signature verification.
        See: nuget.exe help trusted-signers
    -->
    <trustedSigners>
        <author name="microsoft">
            <certificate fingerprint="3F9001EA83C560D712C24CF213C3D312CB3BFF51EE89435D3430BD06B5D0EECE" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
            <certificate fingerprint="AA12DA22A49BCE7D5C1AE64CC1F3D892F150DA76140F210ABD2CBFFCA2C18A27" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
            <certificate fingerprint="566A31882BE208BE4422F7CFD66ED09F5D4524A5994F50CCC8B05EC0528C1353" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
        </author>
        <repository name="nuget.org" serviceIndex="https://api.nuget.org/v3/index.json">
            <certificate fingerprint="0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
            <certificate fingerprint="5A2901D6ADA3D18260B9C6DFE2133C95D74B9EEF6AE0E5DC334C8454D1477DF4" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
            <certificate fingerprint="1F4B311D9ACC115C8DC8018B5A49E00FCE6DA8E2855F9F014CA6F34570BC482D" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
            <owners>microsoft;aspnet;nuget</owners>
        </repository>
    </trustedSigners>
</configuration>