环境变量前缀
分层数据使用 :
作为级别分隔符来表示。 但对于环境变量,:
字符规范化为 __
,因为后者在所有平台上都受支持。 此更改会影响规范化和非规范化前缀与键的比对方式。 具体而言,现在可以通过指定包含 :
或 __
作为分隔符的前缀来添加环境变量。 这两种语法都将匹配任何具有匹配前缀后跟 :
或 __
的环境变量。 以前理论上与筛选器不匹配的某些环境变量现在可能与筛选器匹配。
引入的版本
.NET 7 预览版 4
旧行为
以前,以下代码打印 False
:
using Microsoft.Extensions.Configuration;
const string myValue = "value1";
Environment.SetEnvironmentVariable("MY_PREFIX__ConfigKey", myValue);
IConfiguration config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: "MY_PREFIX__")
.Build();
var loadedValue = config.GetValue<string?>("ConfigKey", null);
Console.WriteLine(String.Equals(myValue, loadedValue));
// False
若要将 MY_PREFIX__ConfigKey
环境变量添加到配置中,必须使用分隔符 :
而不是 __
添加环境变量:
using Microsoft.Extensions.Configuration;
const string myValue = "value1";
Environment.SetEnvironmentVariable("MY_PREFIX__ConfigKey", myValue);
IConfiguration config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: "MY_PREFIX:")
.Build();
var loadedValue = config.GetValue<string?>("ConfigKey", null);
Console.WriteLine(String.Equals(myValue, loadedValue));
// True
新行为
从 .NET 7 开始,以下代码打印 True
:
using Microsoft.Extensions.Configuration;
const string myValue = "value1";
Environment.SetEnvironmentVariable("MY_PREFIX__ConfigKey", myValue);
IConfiguration config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: "MY_PREFIX__")
.Build();
var loadedValue = config.GetValue<string?>("ConfigKey", null);
Console.WriteLine(String.Equals(myValue, loadedValue));
// True
中断性变更的类型
此项更改可能会影响二进制兼容性。
更改原因
进行此更改是为了修复意外的行为变更,以规范 .NET 6 环境变量前缀筛选器。 新行为与 .NET 5 行为匹配。
建议的操作
大多数开发人员不会受到此更改的影响,因为它纠正了以前错误的行为。 如果你属于需要包含 __
的前缀不与包含 __
的环境变量匹配的极少数情况,请考虑更改这些变量的前缀。
受影响的 API
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈