ASP .NET Core读取环境变量

sev*_*rin 51 asp.net asp.net-core-mvc kestrel-http-server asp.net-core

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

set ASPNET_ENV = Production
dnx web
Run Code Online (Sandbox Code Playgroud)

在1.0中使用相同的方法:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run
Run Code Online (Sandbox Code Playgroud)

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

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
Run Code Online (Sandbox Code Playgroud)

返回null

我错过了什么?

Dmi*_*try 97

你的问题是周围的空间=.

这将有效:

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT "));
Run Code Online (Sandbox Code Playgroud)

或删除空格:

set ASPNETCORE_ENVIRONMENT=Production
Run Code Online (Sandbox Code Playgroud)

  • 如果您有“奇怪”的字符值 - 没问题。打开命令提示符,运行 `set myvar=bla=bla bla` 然后运行 ​​`echo %myvar%` - 你会看到 `bla=bla bla` (2认同)
  • 您不希望使用“ ASPNETCORE_ENVIRONMENT”(带尾随空格)-aspnet核心中的功能取决于“ ASPNETCORE_ENVIRONMENT”的值(无尾随空格)-例如解析appsettings.Development.json与appsettings.Production .json。(我添加的细节太长了,无法在此处发表评论:/sf/answers/3351936731/) (2认同)
  • 为什么在对Environment.GetEnvironmentVariable() 的调用中存在尾随空格?使用尾随空格的目的是什么? (2认同)

Isa*_*pov 12

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

你不会想用'ASPNETCORE_ENVIRONMENT '(后面有个空格) -有在ASPNET核心功能依赖于价值'ASPNETCORE_ENVIRONMENT'(无空格) -如解决的appsettings.Development.jsonVS appsettings.Production.json.(例如,请参阅使用多个环境文档文章

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);
        //<...>
    }

    //<...>
}
Run Code Online (Sandbox Code Playgroud)


ume*_*mer 7

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