Как настроить несколько ASPNETCORE_ENVIRONMENT на одном компьютере?

У меня есть веб-приложение ASP.NET. Я настроил веб-приложение на нашем веб-сервере и установил переменную ASPNETCORE_ENVIRONMENT в Development. Я установил эту переменную на уровне машины, как показано на рисунке ниже. Теперь на той же машине я хочу настроить еще один экземпляр того же веб-приложения, что и среда Staging.

Каковы мои настройки здесь, чтобы установить ASPNETCORE_ENVIRONMENT на уровне приложения вместо уровня машины? поэтому я могу разместить несколько экземпляров одного и того же приложения на одной машине?

введите описание изображения здесь

введите описание изображения здесь

Ответ 1

У вас есть несколько вариантов.

  • Запустите каждое приложение как другой пользователь и установите переменную окружения в этом профиле пользователя. Это дает вам дополнительный добавленный бонус безопасности. Вам нужно будет настроить пул приложений для загрузки профиля пользователя.

  • Использовать конфигурацию IIS

    • Запустить диспетчер IIS
    • Выберите редактор конфигурации. Выдвиньте раздел combobox и выберите system.webServer/aspNetCore
    • Потяните вниз combobox и выберите Applicationhost.config
    • Нажмите на elementVariables и нажмите на кнопку..., скрывающуюся в второй столбец справа.
    • Задайте переменные среды.
    • Выйдите из экрана переменных среды и нажмите "Применить".
    • Перезапустите пул приложений/приложение.

Ответ 2

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

В то время как традиционный способ настройки переменной IHostingEnvironment.EnvironmentName осуществляется через переменную среды ASPNETCORE_ENVIRONMENT, как вы это делали, вы можете изменить, как ASP.NET Core анализирует свою конфигурацию, так что вы можете установить переменную с помощью аргумента командной строки.

Чтобы узнать подробности...

По умолчанию файл Program.cs, испущенный командой dotnet new -t web, выглядит примерно так:

public static void Main(string[] args) {
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseUrls("http://0.0.0.0:5000")
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

Это заставляет ASP.NET Core использовать конфигурацию по умолчанию (переменные среды с префиксом ASPNETCORE_ для определения значения IHostingEnvironment.EnvironmentName, который вы используете для настройки работы вашего приложения.

К счастью, вы можете изменить способ настройки ASP.NET Core путем использования метода расширения UseConfiguration() на WebHostBuilder. Здесь приведен пример использования настраиваемой конфигурации со стандартной реализацией:

    public static void Main(string[] args) {
        var configuration =
            new ConfigurationBuilder()
                .AddEnvironmentVariables("ASPNETCORE_")
                .Build();

        var host =
            new WebHostBuilder()
                .UseConfiguration(configuration)
                .UseKestrel()
                .UseUrls("http://0.0.0.0:5000")
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

        host.Run();
    }

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

    public static void Main(string[] args) {
        var configuration =
            new ConfigurationBuilder()
                .AddEnvironmentVariables("ASPNETCORE_")
                .AddCommandLine(args)
                .Build();

        var host =
            new WebHostBuilder()
                .UseConfiguration(configuration)
                .UseKestrel()
                .UseUrls("http://0.0.0.0:5000")
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

        host.Run();
    }

Затем, когда вы начинаете свое ядро ​​с помощью dotnet run, вы можете установить среду в командной строке, например:

dotnet run environment=development
dotnet run environment=staging

Теперь переменная среды ASPNETCORE_ENVIRONMENT по-прежнему будет соблюдаться, но вы можете переопределить ее через командную строку, когда выполняете локальную разработку. В качестве примечания вам нужно будет добавить пакет Microsoft.Extensions.Configuration.CommandLine nuget в ваш файл project.json, если вы уже не сделали этого, чтобы получить метод расширения AddCommandLine().