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


76

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

set ASPNET_ENV = Production
dnx web

在1.0中使用相同的方法:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

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

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

返回null

我想念什么?


我在系统和用户下添加了一个环境变量,但是当我将它们全部拉出时,没有看到我添加的环境变量。这仅在生产环境中有效吗?
丹尼尔·杰克逊

Answers:


128

您的问题是周围有空格=

这将起作用(在结束报价之前注意空格):

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

或删除空格(更好,请参阅下面的@Isantipov注释):

set ASPNETCORE_ENVIRONMENT=Production

PS停止尝试“解决错误的空间”在这个答案!这不是错字!真正的问题是额外的空间(在SET ...中),因此答案是在GetEnvironmentVariable()中使用相同的空间,或者从SET ...命令中将其删除!


1
德米特里,我们应该在CommandPrompt中执行此“ SET”命令吗?
Aswartha

1
Aswartha,这取决于您的机器/场景。如果从命令提示符启动,则可以在“ dotnet run”之前(在同一命令提示符下)在命令提示符下运行,或者将其添加到“我的电脑”环境变量(对于当前计算机上的所有应用程序),或者添加launchSettings(从VS凝视) ,或在Azure中运行时进行WebApp配置。
德米特里

2
如果您有“奇怪”的字符值-没问题。打开命令提示符,运行set myvar=bla=bla bla,然后echo %myvar%-您将看到bla=bla bla
Dmitry

3
您不希望使用“ ASPNETCORE_ENVIRONMENT”(带尾随空格)-aspnet核心中的功能取决于“ ASPNETCORE_ENVIRONMENT”的值(无尾随空格)-例如解析appsettings.Development.json与appsettings.Production .json。(我添加的细节太长了,无法在此处发表评论:stackoverflow.com/a/47884810/1990682
Isantipov

2
为什么对Environment.GetEnvironmentVariable()的调用中有尾随空格?使用尾随空格的目的是什么?
彼得·莫滕森

17

这确实应该是@Dmitry对此答案评论(但时间太长,因此我将其发布为单独的答案):

您不想使用'ASPNETCORE_ENVIRONMENT '(带有尾随空格)-ASP.NET Core中的某些功能取决于'ASPNETCORE_ENVIRONMENT'(没有尾随空格)的值-例如,appsettings.Development.jsonvs的解析appsettings.Production.json。(例如,请参阅使用多个环境文档文档

而且我猜想,如果您只想保留在ASP.NET Core范式之内,则想使用IHostingEnvironment.Environment(请参阅文档)属性,而不是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);
        //<...>
    }

    //<...>
}

你可以阅读Environment.GetEnvironmentVariableStartup.cs我正在寻找一个特定的机器价值
djack109
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.