Зчитування змінних середовища в ASP.NET Core


76

Запустивши програму ASP.NET Core за допомогою DNX , я зміг встановити змінні середовища з командного рядка, а потім запустити її так:

set ASPNET_ENV = Production
dnx web

Використовуючи той самий підхід в 1.0:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

не працює - додаток, здається, не може читати змінні середовища.

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

повертає null

Чого мені не вистачає?


Я додав змінну середовища під систему та користувача, але коли я витягую їх усіх, я не бачу ту, яку додав. Це працює лише у виробничих середовищах?
Даніель Джексон,

Відповіді:


128

Ваша проблема - простори навколо =.

Це спрацює (увага до місця перед закриттям цитати):

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

Або видаліть пробіли (краще, див. Коментар @Isantipov нижче):

set ASPNETCORE_ENVIRONMENT=Production

PS Припиніть намагатися "виправити помилку пробілом" у цій відповіді! Це не друкарська помилка! Справжня проблема, про яку йдеться, полягала в додатковому просторі (у SET ...), тому відповідь - або використовувати той самий простір у GetEnvironmentVariable (), або видалити його з команди SET ...!


1
Дмитре, де ми повинні виконати цю команду "SET" ... у CommandPrompt ??
Асварта

1
Aswartha, це залежить від вашої машини / сценарію. Ви можете запустити це в командному рядку перед "dotnet run" (у тому ж командному рядку), якщо починається з командного рядка, або додавати до змінних середовища "Мій комп'ютер" (для всіх програм на поточній машині) або вlaunchSettings (при погляді з VS) або до конфігурації WebApp під час запуску в Azure.
Дмитро

2
Якщо у вас є "дивні" символи у значенні - не біда. Відкрийте командний рядок, запустіть, set myvar=bla=bla blaа потім echo %myvar%- побачитеbla=bla bla
Дмитро

3
Ви не хотіли б використовувати 'ASPNETCORE_ENVIRONMENT' (із кінцевим простором) - в ядрі aspnet є функції, які залежать від значення "ASPNETCORE_ENVIRONMENT" (без кінцевого простору) - наприклад, вирішення appsettings.Development.json проти appsettings.Production .json. (Я додав трохи деталей занадто довго , щоб бути розміщений в коментарі тут: stackoverflow.com/a/47884810/1990682 )
Isantipov

2
Чому у виклику Environment.GetEnvironmentVariable () є кінцевий пробіл? Який намір використовувати кінцевий пробіл?
Пітер Мортенсен

17

Це повинно бути дійсно коментар до цієї відповіді по @Dmitry (але це занадто довго, тому я його як окрему відповідь):

Ви не хочете використовувати 'ASPNETCORE_ENVIRONMENT '(з завершальними пробілами) - є особливості в ASP.NET Ядра , які залежать від величини 'ASPNETCORE_ENVIRONMENT'(без хвостових прогалин) - наприклад вирішенні appsettings.Development.jsonпроти appsettings.Production.json. (наприклад, див. статтю документації про роботу з кількома середовищами

А також я думаю, якщо ви хочете залишатися суто в рамках парадигми ASP.NET Core, ви хочете використовувати властивість 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);
        //<...>
    }

    //<...>
}

Ви можете прочитати Environment.GetEnvironmentVariableв Startup.csЯ шукаю для конкретного значення машини
djack109

0

Якщо метою читання змінної середовища є перевизначення значень в appsetting.json або будь-якому іншому конфігураційному файлі, ви можете архівувати його через EnvironmentVariablesExtensions .

var builder = new ConfigurationBuilder()
                .AddJsonFile("appSettings.json")
                .AddEnvironmentVariables(prefix: "ABC_")

var config = builder.Build();

введіть тут опис зображення

Згідно з цим прикладом, URL для середовища зчитується з appsettings.json. але коли AddEnvironmentVariables(prefix: "ABC_")рядок додається до ConfigurationBuilder, значення appsettings.json буде замінено значенням змінної середовища.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.