次の方法で共有


環境変数のプレフィックス

階層データ は、レベル区切り記号として : を使用して表されます。 ただし、環境変数の場合、 : 文字はすべてのプラットフォームでサポートされるため、 __に正規化されます。 この変更は、正規化されたプレフィックスと非正規化されたプレフィックスとキーの比較方法に影響します。 具体的には、区切り記号として : または __ を含むプレフィックスを指定することで、環境変数を追加できるようになりました。 どちらの構文も、プレフィックスが一致し、その後に : または __が続く環境変数と一致します。 理論的には以前にフィルターと一致しなかった環境変数の中には、フィルターと一致するものもあります。

導入されたバージョン

.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

こちらも参照ください