Существует два набора конфигурации для приложения ASP.NET Core:
- Конфигурация для WebHost.
- Конфигурация для самого приложения.
Сначала создается конфигурация WebHost ( source ):
_config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
.Build();
Как показывает исходный код, в конфигурации для WebHost используются только переменные среды и только те, с префиксом ASPNETCORE_
. Неудивительно, что одной из этих переменных среды является ASPNETCORE_ENVIRONMENT
.
Чуть позже по ходу дела реализуется реализация IHostingEnvironment
. Это заканчивается использованием _config
для получения параметра конфигурации с именем environment
, который поступает из переменной ASPNETCORE_ENVIRONMENT
. Если такого значения нет, по умолчанию используется значение Production
.
.
Затем создается конфигурация для самого приложения. На шаге 2 в вашем вопросе значение env.EnvironmentName
соответствует значению IHostingEnvironment
, которое я уже упоминал. Если вы должны были установить значение среды, например, Staging
в качестве аргумента командной строки, он не изменит значение, используемое в конфигурации WebHost, поскольку это относится только к конфигурации приложения.
Andew Lock более подробно рассказывает о том, как все это работает, а также демонстрирует, как настроить WebHost для использования дополнительных источников конфигурации.