Lesen Sie Umgebungsvariablen in ASP.NET Core

75

Beim Ausführen meiner ASP.NET Core-Anwendung mit DNX konnte ich Umgebungsvariablen über die Befehlszeile festlegen und dann wie folgt ausführen:

set ASPNET_ENV = Production
dnx web

Verwenden Sie den gleichen Ansatz in 1.0:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

funktioniert nicht - die Anwendung scheint keine Umgebungsvariablen lesen zu können.

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

gibt null zurück

Was vermisse ich?

Severin
quelle
Ich habe eine Umgebungsvariable unter System und Benutzer hinzugefügt, aber wenn ich sie alle ziehe, sehe ich nicht die, die ich hinzugefügt habe. Funktioniert dies nur in Produktionsumgebungen?
Daniel Jackson

Antworten:

127

Ihr Problem sind Leerzeichen =.

Das wird funktionieren:

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

Oder entfernen Sie Leerzeichen (siehe Kommentar von @Isantipov unten):

set ASPNETCORE_ENVIRONMENT=Production
Dmitry
quelle
Dmitry, wo sollen wir diesen "SET" -Befehl ausführen ... in CommandPrompt?
Aswartha
1
Aswartha, es hängt von Ihrer Maschine / Ihrem Szenario ab. Sie können dies an der Eingabeaufforderung vor "dotnet run" (in derselben Eingabeaufforderung) ausführen, wenn Sie an der Eingabeaufforderung beginnen, oder Umgebungsvariablen "My Computer" (für alle Apps auf dem aktuellen Computer) oder inlaunchSettings (wenn Sie von VS aus starren) hinzufügen. oder zur WebApp-Konfiguration, wenn Sie in Azure ausgeführt werden.
Dmitry
2
Wenn Sie "seltsame" Zeichen im Wert haben - kein Problem. Öffnen Sie die Eingabeaufforderung, führen Sie sie aus set myvar=bla=bla blaund echo %myvar%- Sie werden sehenbla=bla bla
Dmitry
3
Sie möchten 'ASPNETCORE_ENVIRONMENT' (mit einem nachgestellten Leerzeichen) nicht verwenden - es gibt Funktionen im Aspnet-Kern, die vom Wert von 'ASPNETCORE_ENVIRONMENT' abhängen (kein nachfolgendes Leerzeichen) - z. B. das Auflösen von appsettings.Development.json vs appsettings.Production .json. (Ich habe ein bisschen Detail hinzugefügt, um es in einem Kommentar hier zu veröffentlichen: stackoverflow.com/a/47884810/1990682 )
Isantipov
2
Warum enthält der Aufruf von Environment.GetEnvironmentVariable () ein abschließendes Leerzeichen? Was ist die Absicht, einen nachgestellten Raum zu verwenden?
Peter Mortensen
17

Dies sollte wirklich ein Kommentar zu dieser Antwort von @Dmitry sein (aber es ist zu lang, daher poste ich es als separate Antwort):

Sie möchten nicht 'ASPNETCORE_ENVIRONMENT '(mit einem nachgestellten Leerzeichen) verwenden - es gibt Funktionen in ASP.NET Core, die vom Wert von 'ASPNETCORE_ENVIRONMENT'(kein nachfolgendes Leerzeichen) abhängen - z . B. das Auflösen von appsettings.Development.jsonvs. appsettings.Production.json(Siehe z. B. Dokumentationsarbeit mit mehreren Umgebungen arbeiten

Und ich denke auch, wenn Sie nur innerhalb des ASP.NET Core-Paradigmas bleiben möchten, möchten Sie die Eigenschaft IHostingEnvironment.Environment(siehe Dokumentation ) verwenden, anstatt Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")direkt daraus zu lesen (obwohl die erstere natürlich von der letzteren festgelegt ist). ZB 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);
        //<...>
    }

    //<...>
}
Isantipov
quelle
lesen Sie Environment.GetEnvironmentVariablein Startup.csI für eine bestimmte Maschine Wert freu
djack109