ASP .NET Core读取环境变量

时间:2016-05-23 09:23:55

标签: asp.net asp.net-core asp.net-core-mvc kestrel-http-server

使用dnx运行我的ASP.NET核心应用程序我能够从命令行设置环境变量,然后像这样运行它:

set ASPNET_ENV = Production
dnx web

在1.0中使用相同的方法:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

不起作用 - 该应用程序似乎无法读取环境变量。

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

返回null

我错过了什么?

2 个答案:

答案 0 :(得分:77)

您的问题是=周围的空格。

这将有效:

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

或删除空格:

set ASPNETCORE_ENVIRONMENT=Production

答案 1 :(得分:6)

这应该是this answer@Dmitry的评论(但是太长了,因此我将其作为单独的答案发布):

您不希望使用'ASPNETCORE_ENVIRONMENT '(带尾随空格) - aspnet核心中的功能取决于'ASPNETCORE_ENVIRONMENT'的值(无尾随空格) - 例如解析appsettings.Development.json vs appsettings.Production.json。 (例如,请参阅Working with multiple environments docs article

Ans我想如果你想纯粹保持在aspnet核心范式内,你需要使用IHostingEnvironment.Environment(参见docs)属性,而不是直接从Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")读取(虽然fromer当然是从后者设定的)。例如。在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);
        //<...>
    }

    //<...>
}