Trasformare web.config

Di Vijay Ramakrishnan

Le trasformazioni per il file web.config possono essere applicate automaticamente quando viene pubblicata un'app in base a:

Queste trasformazioni si verificano per uno degli scenari di generazione di web.config seguenti:

  • Generati automaticamente dall'SDK Microsoft.NET.Sdk.Web.
  • Fornito dallo sviluppatore nella radice del contenuto dell'app.

Configurazione della build

Le trasformazioni di configurazione della build vengono eseguite per prime.

Includere un file web.{CONFIGURAZIONE}.config per ogni configurazione della build (Debug|Versione) che richiede una trasformazione di web.config.

Nell'esempio seguente, una variabile di ambiente specifica della configurazione viene impostata in 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 trasformazione viene applicata quando la configurazione è impostata su Versione:

dotnet publish --configuration Release

La proprietà di MSBuild per la configurazione è $(Configuration).

Profilo

Le trasformazioni di profilo vengono eseguite per seconde, dopo le trasformazioni di configurazione della build.

Includere un file web.{PROFILO}.config per ogni configurazione del profilo che richiede una trasformazione di web.config.

Nell'esempio seguente, una variabile di ambiente per il profilo è impostata in web.FolderProfile.config per un profilo di pubblicazione di cartella:

<?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 trasformazione viene applicata quando il profilo è FolderProfile:

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

La proprietà di MSBuild per il nome del profilo è $(PublishProfile).

Se non viene passato alcun profilo, il nome del profilo predefinito è FileSystem e viene applicato web.FileSystem.config se il file è presente nella radice del contenuto dell'app.

Ambiente

Le trasformazioni di ambiente vengono eseguite per terze, dopo le trasformazioni di configurazione della build e di profilo.

Includere un file web.{AMBIENTE}.config per ogni ambiente che richiede una trasformazione di web.config.

Nell'esempio seguente viene impostata una variabile di ambiente specifica dell'ambiente nel Web. Production.config per l'ambiente di produzione:

<?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 trasformazione viene applicata quando l'ambiente è Production:

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

La proprietà di MSBuild per l'ambiente è $(EnvironmentName).

Quando si pubblica da Visual Studio e si usa un profilo di pubblicazione, vedere Profili di pubblicazione di Visual Studio (con estensione pubxml) per la distribuzione di app ASP.NET Core.

La variabile di ambiente ASPNETCORE_ENVIRONMENT viene aggiunta automaticamente al file Web.config quando viene specificato il nome dell'ambiente.

Personalizzazione

Le trasformazioni personalizzate vengono eseguite per ultime, dopo le trasformazioni di configurazione della build, di profilo e di ambiente.

Includere un file {NOME_PERSONALIZZATO}.transform per ogni configurazione personalizzata che richiede una trasformazione di web.config.

Nell'esempio seguente viene impostata una variabile di ambiente per una trasformazione personalizzata in 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 trasformazione viene applicata al passaggio della proprietà CustomTransformFileName al comando dotnet publish:

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

La proprietà di MSBuild per il nome del profilo è $(CustomTransformFileName).

Impedire trasformazioni di web.config

Per impedire le trasformazioni del file web.config, impostare la proprietà MSBuild $(IsWebConfigTransformDisabled):

dotnet publish /p:IsWebConfigTransformDisabled=true

Risorse aggiuntive