2016-05-23 117 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); 
     //<...> 
    } 

    //<...> 
}