環境變數前置詞
階層式資料的表示會使用 :
作為層級分隔符號。 對於環境變數,則會將 :
字元正規化成所有平台都支援的 __
。 此變更會影響正規化/非正規化前置詞和索引鍵的比較方式。 具體而言,您現在可以藉由指定包含 :
或 __
作為分隔符號的前置詞來新增環境變數。 兩種語法都會尋找相符前置詞後接有 :
或 __
的環境變數。 先前在實際操作上,有一些環境變數篩選不到,現在都沒問題了。
導入的版本
.NET 7 Preview 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 的行為一樣。
建議的動作
因為此變更在變更先前的錯誤行為,所以大多數開發人員都不受影響。 若使用的前置詞包含了 __
,與包含 __
的環境變數不相符,請考慮變更這些變數的前置詞,但此情況不太可能出現。