【问题标题】:How can appSettings.{environment}.json be loaded before environment is known? (AspNetCore)在已知环境之前如何加载 appSettings.{environment}.json? (AspNetCore)
【发布时间】:2019-05-24 08:32:22
【问题描述】:

根据microsoft blog ASPNETCORE_ENVIRONMENT 变量按顺序加载:

  1. appsettings.json 文件
  2. appsettings.{env.EnvironmentName}.json 文件
  3. 本地用户机密文件
  4. 环境变量
  5. 命令行参数(或等效的launchSettings.json)

和“最后加载的密钥获胜”。

问题:

但是如何在知道最终环境之前加载文件 appsettings.{env.EnvironmentName}.json

我是否会通过命令行设置“暂存”环境并加载 appSettings.Development.json,因为在第 2 步中它还不知道?

【问题讨论】:

    标签: asp.net-core environment-variables


    【解决方案1】:

    一个 ASP.NET Core 应用程序有两组配置:

    1. WebHost 的配置。
    2. 应用程序本身的配置。

    首先构建 WebHost 配置 (source):

    _config = new ConfigurationBuilder()
        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
        .Build();
    

    如源代码所示,WebHost 的配置 使用环境变量,并且仅使用以ASPNETCORE_ 为前缀的环境变量。不出所料,其中一个环境变量是ASPNETCORE_ENVIRONMENT

    稍后,IHostingEnvironment 的实现被实例化。这最终使用_config 检索名为environment 的配置设置,该设置来自ASPNETCORE_ENVIRONMENT 变量。如果没有这个值,则默认为Production

    接下来,构建应用程序本身的配置。在您问题的第 2 步,env.EnvironmentName 的值来自我已经提到的IHostingEnvironment。如果您要设置环境值,例如Staging 作为命令行参数,它不会更改 WebHost 配置中使用的值,因为这仅适用于应用程序配置。

    Andew Lock goes into more detail 关于这一切的工作原理,还演示了如何配置 WebHost 以使用其他配置源。

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2021-05-29
      • 2020-07-14
      • 2021-11-18
      相关资源
      最近更新 更多