Переменные среды чтения 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 только при запуске.

Другие вопросы по тегам