Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dane hierarchiczne są reprezentowane przy użyciu : jako ogranicznika poziomu. Jednak w przypadku zmiennych środowiskowych znak : jest znormalizowany do __, 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 : lub __ jako ogranicznik. Składnia będzie zgodna z dowolnymi zmiennymi środowiskowymi z odpowiednim prefiksem, po którym następuje : lub __. Niektóre zmienne środowiskowe, które teoretycznie nie pasują do filtru wcześniej, mogą teraz być zgodne z filtrem.
Wersja wprowadzona
.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 wyświetla 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 przełamującej
Ta zmiana może mieć wpływ na zgodność binarną.
Przyczyna 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ść programistów nie zostanie dotknięta tą zmianą, ponieważ poprawia ona wcześniej błędne działanie. W mało prawdopodobnym przypadku, że polegałeś na tym, że prefiks zawierający __ nie pasuje do zmiennej środowiskowej zawierającej __, rozważ zmianę prefiksów tych zmiennych.