階層データ は、レベル区切り記号として :
を使用して表されます。 ただし、環境変数の場合、 :
文字はすべてのプラットフォームでサポートされるため、 __
に正規化されます。 この変更は、正規化されたプレフィックスと非正規化されたプレフィックスとキーの比較方法に影響します。 具体的には、区切り記号として :
または __
を含むプレフィックスを指定することで、環境変数を追加できるようになりました。 どちらの構文も、プレフィックスが一致し、その後に :
または __
が続く環境変数と一致します。 理論的には以前にフィルターと一致しなかった環境変数の中には、フィルターと一致するものもあります。
導入されたバージョン
.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 の動作と一致します。
推奨されるアクション
ほとんどの開発者は、以前に誤った動作を修正するため、この変更の影響を受けることはありません。
__
を含むプレフィックスが__
を含む環境変数と一致しないという事実に依存していた可能性が低い場合は、それらの変数のプレフィックスを変更することを検討してください。
影響を受ける API
こちらも参照ください
.NET