Можно ли переименовать переменную ASPNETCORE_ENVIRONMENT? - PullRequest
0 голосов
/ 24 марта 2020
Метод

In Configure в классе Startup класса ASP.NET Core WebAPI project ...

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

, введенный IWebHostEnvironment, определяется значением переменной окружения ASPNETCORE_ENVIRONMENT .

Можем ли мы переименовать эту переменную? Если да, это хорошая практика, чтобы переименовать его?

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Существует встроенный способ установки среды для приложения:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseEnvironment("WHAT EVER YOU WANT")//set it for this app
            .ConfigureWebHostDefaults(webBuilder =>
            {
              webBuilder.UseStartup<Startup>();
            });

Как вы можете видеть, вы можете использовать «UseEnvironment (« MY COOL ENVIRONMENT »)» для установки того, что вы когда-либо хочу.

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

Вот некоторая документация. Прокрутите до раздела EnvironmentName , чтобы найти информацию о нем.

1 голос
/ 24 марта 2020

Вы не можете переименовать имена переменных среды ASPNETCORE_ENVIRONMENT или DOTNET_ENVIRONMENT. Они встроены в построитель хостов по умолчанию, который вы, вероятно, будете использовать при создании ASP. NET Базовых приложений.

Однако вы можете настроить хост с собственными источниками конфигурации. Таким образом, вы можете вводить конфигурации из переменных среды, которые не соответствуют стандартным именам. Например, если вы хотите прочитать имя среды из переменной среды stage, вы можете изменить CreateHostBuilder, включив в него вызов ConfigureHostConfiguration, который изменяет конфигурацию:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureHostConfiguration(c => {
            c.AddInMemoryCollection(new Dictionary<string, string>()
            {
                ["Environment"] = Environment.GetEnvironmentVariable("stage"),
            });
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Примечание что если вы вызовете ConfigureHostConfiguration до ConfigureWebHostDefaults, то вам нужно будет убедиться, что ваш launchSettings.json не содержит конфигурации для переменной ASPNETCORE_ENVIRONMENT, иначе ваша пользовательская переменная будет перезаписана. Вы также можете поменять местами эти два вызова, чтобы переменная окружения имела приоритет над стандартным именем. Конечно, это применимо только в разработке (поскольку в производстве нет launchSettings.json).

Чтобы ответить на ваш последний вопрос: это хорошая идея? Возможно нет. Если вам не нужно делать это по внешним причинам (например, чтобы соответствовать существующим процессам развертывания, которые вы не контролируете), вам следует придерживаться имен по умолчанию, чтобы убедиться, что все вовлеченные стороны правильно понимают влияние.

И просто чтобы уточнить это: оба DOTNET_ENVIRONMENT и ASPNETCORE_ENVIRONMENT хороши в использовании, и последний не исчезнет в ближайшее время.

...