Переменные среды чтения ASP .NET Core
Запустив приложение ASP.NET Core с помощью dnx, я смог установить переменные среды из командной строки, а затем запустить его так:
set ASPNET_ENV = Production
dnx web
Используя тот же подход в 1.0:
set ASPNETCORE_ENVIRONMENT = Production
dotnet run
не работает - приложение не может читать переменные окружения.
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
возвращает ноль
Что мне не хватает?
3 ответа
Ваша проблема - пробелы вокруг =
,
Это будет работать:
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT "));
Или удалите пробелы:
set ASPNETCORE_ENVIRONMENT=Production
Это действительно должен быть комментарий к этому ответу Dmitry (но слишком длинный, поэтому я Dmitry его как отдельный ответ):
Вы не хотели бы использовать 'ASPNETCORE_ENVIRONMENT '
(с завершающим пробелом) - в ядре aspnet есть функции, которые зависят от значения 'ASPNETCORE_ENVIRONMENT'
(без пробела) - например, разрешение appsettings.Development.json
против appsettings.Production.json
, (например, см. статью "Работа с несколькими средами").
Кроме того, я думаю, что если вы хотите остаться в рамках основной парадигмы aspnet, вы бы хотели использовать IHostingEnvironment.Environment
(см. документы) свойство вместо чтения из Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
напрямую (хотя от последнего конечно устанавливается морозильник). Например, в Startup.cs
public class Startup
{
//<...>
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
Console.WriteLine("HostingEnvironmentName: '{0}'", env.EnvironmentName);
//<...>
}
//<...>
}
Если вы создаете переменные среды во время выполнения во время разработки, вы каждый раз будете получать нуль. Вы должны перезапустить визуальную студию, потому что VS читает EV только при запуске.