Преобразование web.config

Автор: Виджай Рамакришнан (Vijay Ramakrishnan)

Преобразования файла web.config можно применять автоматически при публикации приложения на основе следующих данных:

Такие преобразования выполняются в любом из следующих сценариев создания web.config:

Конфигурация построения

Первыми выполняются преобразования конфигурации сборки.

Добавьте файл web.{КОНФИГУРАЦИЯ}.config для каждой конфигурации сборки для отладки или выпуска, чтобы потребовать преобразование web.config.

В следующем примере задается переменная для конкретной конфигурации в файле 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>

Это преобразование применяется, если настроена конфигурация выпуска (Release).

dotnet publish --configuration Release

Свойство MSBuild для этой конфигурации имеет значение $(Configuration).

Profile

Во вторую очередь, после конфигурации сборки, выполняются преобразования профиля.

Добавьте файл web.{ПРОФИЛЬ}.config для каждой конфигурации профиля, которой требуется преобразование web.config.

В следующем примере в файле web.FolderProfile.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="Profile_Specific" 
                               value="Profile_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

Это преобразование применяется, если используется профиль FolderProfile.

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

Свойство MSBuild для имени профиля имеет значение $(PublishProfile).

Если профиль не передан, используется имя профиля по умолчанию FileSystem, а следовательно применяется файл web.FileSystem.config, если он присутствует в корневом каталоге содержимого приложения.

Среда

Третьими, после преобразований конфигурации сборки и профиля, выполняются преобразования среды.

Добавьте файл web.{СРЕДА}.config для каждой среды, которой требуется преобразование web.config.

В следующем примере в файле web.Production.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="Environment_Specific" 
                               value="Environment_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

Это преобразование применяется, если используется среда Production.

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

Свойство MSBuild для этой среды имеет значение $(EnvironmentName).

При публикации из Visual Studio и использовании профиля публикации см. статью Профили публикации Visual Studio (.pubxml) для развертывания приложений ASP.NET Core.

Переменная среды ASPNETCORE_ENVIRONMENT автоматически добавляется в файл web.config, если указано имя среды.

Пользовательское

И, наконец, после преобразований конфигурации сборки, профиля и среды выполняются пользовательские преобразования.

Добавьте файл web.{ПОЛЬЗОВАТЕЛЬСКОЕ_ИМЯ}.config для каждой пользовательской конфигурации, которой требуется преобразование web.config.

В следующем примере в файле 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>

Это преобразование применяется, если в команду dotnet publish передано свойство CustomTransformFileName.

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

Свойство MSBuild для имени профиля имеет значение $(CustomTransformFileName).

Предотвращение преобразования web.config

Чтобы избежать преобразования файла web.config, настройте свойство MSBuild $(IsWebConfigTransformDisabled) следующим образом.

dotnet publish /p:IsWebConfigTransformDisabled=true

Дополнительные ресурсы