18

Запуск мой ASP.NET Core-приложение с помощью DNX я был в состоянии установить переменные окружения из командной строки, а затем запустить его так:ASP .NET Ядро чтения переменных окружения

set ASPNET_ENV = Production 
dnx web 

Используя тот же подход 1.0:

set ASPNETCORE_ENVIRONMENT = Production 
dotnet run 

не работает - приложение, похоже, не может читать переменные среды.

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); 

возвращает нулевое значение

Что я упускаю?

ответ

34

Ваша проблема в пробелах около =.

Это будет работать:

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT ")); 

или удалить пробелы:

set ASPNETCORE_ENVIRONMENT=Production 
+0

Дмитрий, где мы должны выполнить это «SET» команду ... в интерпретаторе команд ?? – Aswartha

+0

Aswartha, это зависит от вашей машины/сценария. Вы можете запустить в командной строке перед «выполнением« dotnet »(в той же командной строке), если вы начинаете с командной строки или добавляете в переменные среды« Мой компьютер »(для всех приложений на текущей машине), o r [в 'launchSettings'] (https://docs.asp.net/en/latest/fundamentals/environments.html) (при просмотре с VS) или в конфигурации WebApp при запуске в Azure. – Dmitry

+0

Хорошо, и что произойдет, если мы имеем '=' знак или пробел '' как часть значения переменной среды? Как мы должны назначать/извлекать их? – nicks

0

Это должно быть действительно комментарий к this answer на @Dmitry (но слишком долго, поэтому я его как отдельный ответ) :

Вы не хотите использовать 'ASPNETCORE_ENVIRONMENT ' (с задним пространством) - в ядре aspnet есть функции, которые зависят от значение 'ASPNETCORE_ENVIRONMENT' (без конечного пространства) - например. разрешение appsettings.Development.json против appsettings.Production.json. (Например, см Working with multiple environments docs article

Ans и я думаю, если вы хотели бы остаться чисто внутри ядра САШ парадигмы, вы хотите использовать IHostingEnvironment.Environment (см docs) свойство вместо чтения 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); 
     //<...> 
    } 

    //<...> 
} 
Смежные вопросы