读取 ASP.NET Core 中的环境变量

Read environment variables in ASP.NET Core

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

set ASPNET_ENV = Production
dnx web

在 1.0 中使用相同的方法:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

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

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

returns 空

我错过了什么?

您的问题是 space 大约 =

这会起作用(在结束引用前注意 space):

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

这段代码中ASPNETCORE_ENVIRONMENT后面的space不是错字!问题中的问题是有额外的 space (在 SET...),所以你必须在 GetEnvironmentVariable().

中使用相同的 space

所述,更好的解决方案是从 SET 命令中完全删除 space:

set ASPNETCORE_ENVIRONMENT=Production

这真的应该是对 by @Dmitry 的评论(但是它太长了,因此我 post 它作为一个单独的答案):

您不想使用 'ASPNETCORE_ENVIRONMENT '(尾随 space)- ASP.NET Core 中的某些功能取决于 'ASPNETCORE_ENVIRONMENT' 的值(没有尾随 space) - 例如解析 appsettings.Development.jsonappsettings.Production.json。 (例如,参见 Working with multiple environments documentation article

而且我想如果你想完全留在 ASP.NET 核心范例中,你会想使用 IHostingEnvironment.Environment(参见 documentation)属性而不是直接从 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);
        //<...>
    }

    //<...>
}

如果您在开发期间在运行时创建环境变量,那么您每次都会得到 null。您必须重新启动 visual studio 因为 VS 仅在启动时读取 EV。