【问题标题】:Read environment variables in ASP.NET Core在 ASP.NET Core 中读取环境变量
【发布时间】:2016-05-23 09:23:55
【问题描述】:

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

set ASPNET_ENV = Production
dnx web

在 1.0 中使用相同的方法:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

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

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

返回空值

我错过了什么?

【问题讨论】:

  • 我在系统和用户下添加了一个环境变量,但是当我将它们全部拉出时,我看不到我添加的那个。这只适用于生产环境吗?

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


【解决方案1】:

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

这会起作用(在结束引号之前注意空格):

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

此代码中ASPNETCORE_ENVIRONMENT 后面的空格不是错字!问题中的问题是有额外的空间(在 SET... 中),因此您必须在 GetEnvironmentVariable() 中使用相同的空间。

正如Isantipov in a comment 所述,更好的解决方案是从 SET 命令中完全删除空格:

set ASPNETCORE_ENVIRONMENT=Production

【讨论】:

  • Dmitry,我们应该在 CommandPrompt 中哪里执行这个“SET”命令??
  • Aswartha,这取决于您的机器/场景。如果从命令提示符开始,您可以在“dotnet run”(在同一命令提示符中)之前的命令提示符中运行它,或者添加到“我的电脑”环境变量(对于当前机器上的所有应用程序),或into launchSettings(从VS),或在 Azure 中运行时进行 WebApp 配置。
  • 好的,如果我们将= 符号或空格 ` ` 作为环境变量值的一部分会发生什么?我们应该如何分配/获取这些?
  • 如果您的值中有“奇怪”字符 - 没问题。打开命令提示符,运行set myvar=bla=bla bla,然后运行echo %myvar% - 你会看到bla=bla bla
  • 你不会想要使用 'ASPNETCORE_ENVIRONMENT '(带有尾随空格) - aspnet 核心中有一些功能取决于 'ASPNETCORE_ENVIRONMENT' 的值(没有尾随空格) - 例如解决 appsettings.Development.json vs appsettings.Production.json。 (我添加了一些太长的细节,无法在此处发表评论:stackoverflow.com/a/47884810/1990682
【解决方案2】:

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

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

而且我想如果你想完全停留在 ASP.NET Core 范式中,你会想使用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);
        //<...>
    }

    //<...>
}

【讨论】:

  • 你能在Startup.cs中读到Environment.GetEnvironmentVariable吗?我正在寻找一个特定的机器值
  • @djack109 我认为你应该可以,除非 dotnet core 以某种方式特别阻止它。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 2022-11-16
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多