Miljövariabelprefix

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.

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.

Berörda API:er

Se även