Вы можете изменить конфигурацию синтаксического анализа кода, работающего на веб-сервере? Это то, что я бы рекомендовал делать. Это позволит вам более естественным образом настроить вашу среду в настройках 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()
.
Как ваш проект построен и развернут? Возможно, вы захотите передать префикс системной среды для вашей системы во время сборки или развертывания проекта. Поэтому они могут использовать префикс переменной среды, чтобы получить значение среды. – Ricky