Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Hierarkiska data representeras med : som nivåavgränsare. För miljövariabler normaliseras : dock tecknet till __, eftersom det senare stöds på alla plattformar. Den här ändringen påverkar hur normaliserade och icke-normaliserade prefix och nycklar jämförs. Mer specifikt kan du nu lägga till miljövariabler genom att ange ett prefix som innehåller antingen : eller __ som avgränsare. Antingen matchar syntaxen alla miljövariabler med ett matchande prefix följt av antingen en : eller __. Vissa miljövariabler som teoretiskt sett inte matchade filtret tidigare kan nu matcha filtret.
Version lanserad
.NET 7 Förhandsversion 4
Tidigare beteende
Tidigare skrevs följande kod ut 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
För att MY_PREFIX__ConfigKey miljövariabeln ska läggas till i konfigurationen var du tvungen att lägga till miljövariabler med en avgränsare : i stället för __:
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
Nytt beteende
Från och med .NET 7 skriver följande kod ut 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 av brytande ändring
Den här ändringen kan påverka binär kompatibilitet.
Orsak till ändring
Den här ändringen gjordes för att åtgärda en oavsiktlig beteendeändring för normalisering av miljövariabelprefixfilter i .NET 6. Det nya beteendet matchar .NET 5-beteendet.
Rekommenderad åtgärd
De flesta utvecklare påverkas inte av den här ändringen eftersom den korrigerar tidigare felaktigt beteende. I det osannolika fallet att du förlitade dig på att ett prefix som innehåller __ inte matchade en miljövariabel som innehåller __, bör du överväga att ändra prefixen för dessa variabler.