DotNetCore 3.1 中的配置双下划线似乎没有像我预期的那样工作

Rya*_*ice 2 .net-core asp.net-core

我试图让配置在 ASP.Net core 3.1 中使用双下划线,如下所述: https: //learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/ ?tabs=basicconfiguration&view=aspnetcore -3.1#环境变量

我已经编写了一些手动执行此操作的配置代码

  1. 检查环境变量
  2. 检查 AppSettings...json 文件

但我发现在 .net 3.1 中,默认情况下应该支持这一点,但需要注意 UNIX 平台上的层次结构设置。在这种情况下你不能使用这个语法

Configuration["SomeSection:SomeConfig"]
Run Code Online (Sandbox Code Playgroud)

解决这个环境变量

## Environment Var
SomeConfig:SomeConfig
Run Code Online (Sandbox Code Playgroud)

因为 Linux 不支持环境变量名称中的冒号。然而,如果代码部署到 Windows 机器上,这将起作用。因此 .net 似乎表明您可以使用此语法

Configuration["SomeSection__SomeConfig"]
Run Code Online (Sandbox Code Playgroud)

这将解决以下任何配置

// AppSettings...json
{
   "SomeSection" {
      "SomeConfig": "some value"
   }
}
Run Code Online (Sandbox Code Playgroud)

或者

# Environment Var on linux
SomeConfig__SomeConfig
Run Code Online (Sandbox Code Playgroud)

或者

// Environment Var on windows
SomeConfig:SomeConfig
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

编辑:请注意,我知道这个问题的答案,并且如果重新打开它,我会很乐意回答它。

Rya*_*ice 8

我误解了文档。它的工作方式是,如果您在您的Startup.cs

Configuration["SomeSection:SomeConfig"]
Run Code Online (Sandbox Code Playgroud)

它将正确解决

// AppSettings...json
{
   "SomeSection" {
      "SomeConfig": "some value"
   }
}
Run Code Online (Sandbox Code Playgroud)

从您的各种appsettings*.json文件中。

SomeSection:SomeConfig但是,如果您使用将使用的名称而不是appsettings.json值来定义环境变量,这是一个很棒的功能。在 Docker 容器中运行应用程序时,这通常是可取的。

但是,如果在 Linux 操作系统上,则无法创建名为 的环境变量SomeSection:SomeConfig。因此,如果您在 Linux 计算机或 Linux 容器中,如果您SomeSection__SomeConfig使用__(双下划线)而不是 a 来命名环境变量:,那么您可以像下面这样访问:

Configuration["SomeSection:SomeConfig"]
Run Code Online (Sandbox Code Playgroud)