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 False
nastę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.
Zalecana akcja
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.