Как настроить несколько 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()
.