2016-05-23 24 views
18

esecuzione il mio ASP.NET core-app utilizzando dnx sono stato in grado di impostare le variabili d'ambiente dalla riga di comando e quindi eseguirlo in questo modo:ASP .NET Nucleo leggere le variabili d'ambiente

set ASPNET_ENV = Production 
dnx web 

Utilizzando lo stesso approccio in 1.0:

set ASPNETCORE_ENVIRONMENT = Production 
dotnet run 

non funziona: l'app non sembra in grado di leggere le variabili di ambiente.

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

restituisce null

Che cosa mi manca?

risposta

34

Il tuo problema riguarda gli spazi intorno allo =.

questo lavoro:

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

o rimuovere spazi:

set ASPNETCORE_ENVIRONMENT=Production 
+0

Dmitry, dove dovremmo eseguire questo comando ... in CommandPrompt ?? – Aswartha

+0

Aswartha "sET", dipende dalla vostra macchina/scenario. È possibile eseguire questo nel prompt dei comandi prima di "eseguire dotnet" (nello stesso prompt dei comandi) se si avvia dal prompt dei comandi o aggiungere alle variabili di ambiente "Risorse del computer" (per tutte le app sul computer corrente), o r [in 'launchSettings'] (https://docs.asp.net/en/latest/fundamentals/environments.html) (quando si avvia da VS), o alla configurazione di WebApp quando è in esecuzione in Azure. – Dmitry

+0

Ok, e cosa succede se abbiamo '=' sign o space '' come parte del valore della variabile d'ambiente? Come dovremmo assegnare/recuperare quelli? – nicks

0

Questo in realtà dovrebbe essere un commento a this answer da @Dmitry (ma troppo lungo, quindi ho posto come una risposta separata) :

Non si desidera utilizzare 'ASPNETCORE_ENVIRONMENT ' (con uno spazio finale) - ci sono funzionalità nel nucleo di aspnet che dipendono dal valore di 'ASPNETCORE_ENVIRONMENT' (senza spazio finale) - ad es. risoluzione di appsettings.Development.json rispetto a appsettings.Production.json. (Ad esempio, vedere Working with multiple environments docs article

Ans anche credo che se si desidera rimanere puramente all'interno paradigma nucleo aspnet, che ci si vuole utilizzare IHostingEnvironment.Environment (vedi docs) immobili invece di leggere da Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") direttamente (anche se il fromer è, naturalmente, set da quest'ultimo). Ad esempio, in 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); 
     //<...> 
    } 

    //<...> 
}