Transformación de web.config

Por Vijay Ramakrishnan

Las transformaciones en el archivo web.config se pueden aplicar automáticamente al publicarse una aplicación en función de:

Estas transformaciones se producen en cualquiera de los escenarios de generación web.config siguientes:

  • Generadas automáticamente por el SDK Microsoft.NET.Sdk.Web.
  • Proporcionadas por el desarrollador en la raíz del contenido de la aplicación.

Configuración de compilación

Las transformaciones de la configuración de compilación se ejecutan en primer lugar.

Incluya un archivo web.{CONFIGURATION}.config para cada configuración de compilación (Debug|Release) que requiera una transformación de web.config.

En el siguiente ejemplo, una variable de entorno específica de la configuración se establece en web.Release.config:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables xdt:Transform="InsertIfMissing">
          <environmentVariable name="Configuration_Specific" 
                               value="Configuration_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

La transformación se aplica cuando la configuración se establece en Release:

dotnet publish --configuration Release

La propiedad MSBuild de la configuración es $(Configuration).

Perfil

Las transformaciones del perfil se ejecutan en segundo lugar, una vez transformada la configuración de compilación.

Incluya un archivo web.{PROFILE}.config para cada configuración de perfil que requiera una transformación de web.config.

En el siguiente ejemplo, una variable de entorno específica del perfil se establece en web.FolderProfile.config para un perfil de publicación de carpetas:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables xdt:Transform="InsertIfMissing">
          <environmentVariable name="Profile_Specific" 
                               value="Profile_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

La transformación se aplica cuando el perfil es FolderProfile:

dotnet publish --configuration Release /p:PublishProfile=FolderProfile

La propiedad MSBuild del nombre de perfil es $(PublishProfile).

Si no se pasa ningún perfil, el nombre de perfil predeterminado es FileSystem y web.FileSystem.config se aplica si el archivo está presente en la raíz del contenido de la aplicación.

Entorno

Las transformaciones del entorno se ejecutan en tercer lugar, una vez transformados la configuración de compilación y el perfil.

Incluya un archivo web.{ENVIRONMENT}.config para cada entorno que requiera una transformación de web.config.

En el siguiente ejemplo, una variable de entorno específica del entorno se establece en web.Production.config para el entorno de producción:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables xdt:Transform="InsertIfMissing">
          <environmentVariable name="Environment_Specific" 
                               value="Environment_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

La transformación se aplica cuando el entorno es Production:

dotnet publish --configuration Release /p:EnvironmentName=Production

La propiedad MSBuild del entorno es $(EnvironmentName).

Al publicar desde Visual Studio y usar un perfil de publicación, consulte Perfiles de publicación (.pubxml) de Visual Studio para la implementación de aplicaciones ASP.NET Core.

La variable de entorno ASPNETCORE_ENVIRONMENT se agrega automáticamente al archivo web.config al especificarse el nombre del entorno.

Personalizados

Las transformaciones personalizadas se ejecutan en último lugar, una vez transformados la configuración de compilación, el perfil y el entorno.

Incluya un archivo {CUSTOM_NAME}.transform para cada configuración personalizada que requiera una transformación de web.config.

En el siguiente ejemplo, una variable de entorno de transformación personalizada se establece en custom.transform:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables xdt:Transform="InsertIfMissing">
          <environmentVariable name="Custom_Specific" 
                               value="Custom_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

La transformación se aplica cuando la propiedad CustomTransformFileName se pasa al comando dotnet publish:

dotnet publish --configuration Release /p:CustomTransformFileName=custom.transform

La propiedad MSBuild del nombre de perfil es $(CustomTransformFileName).

Evitar la transformación de web.config

Para evitar las transformaciones del archivo web.config, establezca la propiedad MSBuild $(IsWebConfigTransformDisabled):

dotnet publish /p:IsWebConfigTransformDisabled=true

Recursos adicionales