18

Exécution my-app de base ASP.NET à l'aide DNX j'ai pu définir des variables d'environnement de la ligne de commande, puis exécutez comme ceci:ASP .NET de base lire les variables d'environnement

set ASPNET_ENV = Production 
dnx web 

En utilisant la même approche 1.0:

set ASPNETCORE_ENVIRONMENT = Production 
dotnet run 

ne fonctionne pas - l'application ne semble pas capable de lire les variables d'environnement.

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

renvoie la valeur null

Qu'est-ce que je manque?

Répondre

34

Votre problème concerne les espaces autour de =.

Cela fonctionne:

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

ou supprimer des espaces:

set ASPNETCORE_ENVIRONMENT=Production 
+0

Dmitry, où doit-on exécuter cette commande "sET" ... dans CommandPrompt ?? – Aswartha

+0

Aswartha, cela dépend de votre machine/scénario. Vous pouvez exécuter cette dans l'invite de commande avant "lancer dotnet" (dans la même invite de commande) si vous démarrez à partir de l'invite de commande, ou ajoutez des variables d'environnement "My Computer" (pour toutes les applications sur la machine actuelle), o r [dans 'launchSettings'] (https://docs.asp.net/en/latest/fundamentals/environments.html) (lors de la visualisation à partir de VS), ou à la configuration de WebApp lors de l'exécution dans Azure. – Dmitry

+0

Bon, et que se passe-t-il si nous avons '=' signe ou espace '' dans le cadre de la valeur de la variable d'environnement? Comment devrions-nous attribuer/chercher ces? – nicks

0

Cela devrait vraiment être un commentaire à this answer par @Dmitry (mais trop long, donc je l'afficher comme une réponse séparée) :

Vous ne voulez pas utiliser 'ASPNETCORE_ENVIRONMENT ' (avec un espace de fin) - il existe des fonctionnalités dans le noyau aspnet qui dépendent de la valeur de 'ASPNETCORE_ENVIRONMENT' (pas d'espace arrière) - par ex. résolution de appsettings.Development.json par rapport à appsettings.Production.json. (Voir par exemple Working with multiple environments docs article

Ans aussi je suppose que si vous voulez rester purement intérieur paradigme de base aspnet, vous voudriez utiliser IHostingEnvironment.Environment (voir docs) propriété au lieu de lire à partir Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") directement (bien que le fromer est bien sûr ensemble de celui-ci). Par exemple, dans 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); 
     //<...> 
    } 

    //<...> 
}