EnvironmentTagHelper

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 06.12.2019

Тег EnvironmentTagHelper используется для генерации определенной разметки html в зависимости от состояния приложения: находится ли приложение в процессе разработки, тестирования или уже опубликовано на сервере. Состояние проекта задается с помощью среды окружения ASPNETCORE_ENVIRONMENT. Нередко данный тег-хелпер используется совместно с LinkTagHelper и ScriptTagHelper. Его ключевой атрибут names позволяет установить названия состояний среды, при которых применяется данный тег.

Например, мы могли бы подключать css-стили bootstrap с использованием данного тег-хелпера следующим образом:

<environment names="Development">
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
</environment>
<environment names="Staging,Production">
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/4.3.0/css/bootstrap.min.css" />
</environment>

Атрибут names через запятую позволяет перечислить, к каким состояниям среды приложения применяется этот тег. В данном случае, если проект на стадии Development (то есть в разработке), то подключается локальный файл bootstrap.css. Если же проект находится в процессе тестирования (Staging) или уже опубликован (Production), то подключается файл bootstrap.min.css из CDN.

При обработке данного тега фреймворк использует значение переменной окружения ASPNETCORE_ENVIRONMENT. При разработке по умолчанию эта переменная имеет значение "Development". В частности, мы можем увидеть ее значение, открыв свойства проекта и далее вкладку Debug:

environmenttaghelper in ASP.NET Core

Значение переменной ASPNETCORE_ENVIRONMENT привязано к определенному профилю. По умолчанию проект ASP.NET Core предлагает два профиля. Один называется IISExpress, а другой по имени проекта.

Например, в данном случае проект находится в состоянии Development, поэтому выше определенный тег environment будет генерировать следующую разметку:

<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.css" />

Если же мы изменим значение ASPNETCORE_ENVIRONMENT на Production:

Переменная ASPNETCORE_ENVIRONMENT в ASP.NET Core

В этом случае тег environment сгенерирует следующую разметку:

<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/4.3.0/css/bootstrap.min.css" />

Кроме окна свойств проекта мы можем поменять значение ASPNETCORE_ENVIRONMENT для определенного профиля в файле launchSettings.json, который находится в проекте в папке Properties и который по умолчанию выглядит примерно так:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iis": {
      "applicationUrl": "http://localhost/TagHelpersApp",
      "sslPort": 0
    },
    "iisExpress": {
      "applicationUrl": "http://localhost:60141",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "TagHelpersApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:5000"
    }
  }
}

Здесь мы можем поменять значение "ASPNETCORE_ENVIRONMENT" на любое предпочтительное. При этом обращаю внимание, что это значение довольно условное: мы можем вводить свои собственные значения, если нам необходимо более детально разграничить стадии разработки или типы окружения, в которых пребывает проект.

Также обращаю внимание, что тег environment касается не только подключения стилей или скриптов, но и добавление любой разметки html. Например, определим в представлении следующий код:

<environment names="Production">
    <p>Проект развернут на сервере</p>
</environment>

<environment names="Development">
    <p>Проект в состоянии разработки</p>
</environment>
Profile ASPNETCORE_ENVIRONMENT in ASP.NET Core
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850