2016-05-23 113 views
18

使用DNX我能夠在命令行設置環境變量,然後運行它像這樣運行我的ASP.NET核心 - 應用:ASP .NET核心閱讀環境變量

set ASPNET_ENV = Production 
dnx web 

使用相同的方法1.0:

set ASPNETCORE_ENVIRONMENT = Production 
dotnet run 

不起作用 - 該應用似乎無法讀取環境變量。

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

返回null

我缺少什麼?

回答

34

你的問題是=附近的空間。

這將工作:

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

或者刪除空格:

set ASPNETCORE_ENVIRONMENT=Production 
+0

梅德,我們應該在哪裏執行該「SET」命令在CommandPrompt ?? – Aswartha

+0

Aswartha,這取決於你的機器/場景,您可以運行此在「dotnet運行」之前的命令提示符(在相同的命令提示符下)如果從命令提示符開始,或添加到「我的電腦」環境變量(對於當前機器上的所有應用程序),o r [進入'launchSettings'](https://docs.asp.net/en/latest/fundamentals/environments.html)(從VS開始),或者在Azure中運行時進行WebApp配置。 – Dmitry

+0

好的,如果我們將'='符號或空格'作爲環境變量值的一部分,會發生什麼?我們應該如何分配/獲取這些? – nicks

0

這確實應該由@Dmitrythis answer評論(但太長了,所以我將它張貼作爲一個單獨的答案) :

你不想使用'ASPNETCORE_ENVIRONMENT '(有一個尾隨空格) - 有aspnet核心中的功能取決於值爲'ASPNETCORE_ENVIRONMENT'(無尾隨空間) - 例如解析appsettings.Development.json vs appsettings.Production.json。 (例如,見Working with multiple environments docs article

答案也是我想如果你想留純粹ASPNET核心模式裏面,你想使用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); 
     //<...> 
    } 

    //<...> 
}