Udostępnij za pośrednictwem


Prefiksy zmiennych środowiskowych

Dane hierarchiczne są reprezentowane przy użyciu : jako ogranicznika poziomu. Jednak w przypadku zmiennych : środowiskowych znak jest znormalizowany do __wartości , ponieważ ten ostatni jest obsługiwany na wszystkich platformach. Ta zmiana wpływa na sposób porównywania znormalizowanych i nie znormalizowanych prefiksów i kluczy. W szczególności można teraz dodać zmienne środowiskowe, określając prefiks zawierający : ogranicznik lub __ jako ogranicznik. Składnia będzie zgodna z dowolnymi zmiennymi środowiskowymi z pasującym prefiksem, po którym następuje wartość a : lub __. Niektóre zmienne środowiskowe, które teoretycznie nie pasują do filtru wcześniej, mogą teraz być zgodne z filtrem.

Wprowadzona wersja

.NET 7 (wersja zapoznawcza 4)

Poprzednie zachowanie

Wcześniej został wydrukowany Falsenastępujący kod:

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

Aby zmienna MY_PREFIX__ConfigKey środowiskowa była dodawana do konfiguracji, trzeba było dodać zmienne środowiskowe przy użyciu ogranicznika : zamiast __:

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

Nowe zachowanie

Począwszy od platformy .NET 7, następujący kod drukuje 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

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność binarną.

Przyczyna wprowadzenia zmiany

Ta zmiana została wprowadzona w celu naprawienia niezamierzonej zmiany zachowania w celu normalizacji filtrów prefiksów zmiennych środowiskowych na platformie .NET 6. Nowe zachowanie jest zgodne z zachowaniem platformy .NET 5.

Większość deweloperów nie będzie miała wpływu na tę zmianę, ponieważ poprawia wcześniej błędne zachowanie. W mało prawdopodobnym przypadku polegaliśmy na tym, że prefiks zawierający nie pasuje do zmiennej środowiskowej zawierającej __ __, rozważ zmianę prefiksów tych zmiennych.

Dotyczy interfejsów API

Zobacz też