2016-11-22 5 views
10

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

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

enter image description here

enter image description here

+0

Как ваш проект построен и развернут? Возможно, вы захотите передать префикс системной среды для вашей системы во время сборки или развертывания проекта. Поэтому они могут использовать префикс переменной среды, чтобы получить значение среды. – Ricky

ответ

8

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

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

  2. Использование IIS конфигурация менеджер

    1. Запуск IIS
    2. Выберите Редактор конфигурации Опускает раздел выпадающих и выберите system.webServer/aspNetCore
    3. Потяните вниз от выпадающего и выберите Applicationhost.config
    4. Нажмите на элемент environmentVariables и нажмите кнопку ..., скрывая в второй co lumn, справа.
    5. Установите переменные окружения.
    6. Выйдите из экрана переменных среды и нажмите «Применить».
    7. Перезапустите приложение/приложение.
+1

В дополнение к решению # 1: 1.1 Создайте нового пользователя, 1.2 Войдите в систему и войдите в учетные записи пользователей - 1.3 Нажмите «Установить переменные env», 1.4 Войдите в свой основной пользователь и перейдите в IIS, 1.5 Выберите пул веб-сайта, который вы хотите изменить, 1.6 Установите пользователя, 1.7 в дополнительных опциях, установите «load user profile» = true – Jean

+2

Я использовал решение 2 – LP13

1

Вы можете изменить конфигурацию синтаксического анализа кода, работающего на веб-сервере? Это то, что я бы рекомендовал делать. Это позволит вам более естественным образом настроить вашу среду в настройках 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 ядра использовать the default configuration processing (environment variables with a ASPNETCORE_ prefix) для определения значение IHostingEnvironment.EnvironmentName, которое вы используете для настройки работы вашего приложения.

К счастью, вы можете изменить способ ASP.NET Core анализирует конфигурацию, используя UseConfiguration() extension method on 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 с dotnet run, вы можете установить среду в командной строке, например :

dotnet run environment=development 
dotnet run environment=staging 

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

+0

Я действительно не хочу запускать свое приложение, используя команду, как в процессе производства. Приложение работает под IIS. Я использовал @blowdart 2nd solution – LP13

+0

dotnet run не обязательно то, что каждый использует для запуска приложения. Таким образом, этот подход ломается, когда, например, размещается в IIS или непосредственно создается процесс за пустельгой. – joey

Смежные вопросы