Präfixe von Umgebungsvariablen

Hierarchische Daten werden als : Ebenentrennzeichen dargestellt. Bei Umgebungsvariablen wird das :-Zeichen jedoch zu __ normalisiert, da letzteres auf allen Plattformen unterstützt wird. Diese Änderung wirkt sich darauf aus, wie normalisierte und nicht normalisierte Präfixe und Schlüssel verglichen werden. Insbesondere können Sie jetzt Umgebungsvariablen hinzufügen, indem Sie ein Präfix angeben, das entweder : oder __ als Trennzeichen enthält. Beide Syntaxen entsprechen allen Umgebungsvariablen mit einem passenden Präfix, gefolgt von einem : oder __. Einige Umgebungsvariablen, die theoretisch nicht mit dem Filter übereinstimmen, stimmen möglicherweise jetzt mit dem Filter überein.

Eingeführte Version

.NET 7 Preview 4

Vorheriges Verhalten

Zuvor wurde der folgende Code gedruckt 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

Damit die MY_PREFIX__ConfigKey Umgebungsvariable der Konfiguration hinzugefügt werden kann, müssen Sie Umgebungsvariablen mithilfe eines Trennzeichens : statt __ hinzufügen.

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

Neues Verhalten

Ab .NET 7 gibt der folgende Code True aus:

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

Art der einschneidenden Änderung

Diese Änderung kann sich auf die binäre Kompatibilität auswirken.

Grund für Änderung

Diese Änderung wurde vorgenommen, um eine unbeabsichtigte Verhaltensänderung für die Normalisierung von Präfixfiltern für Umgebungsvariablen in .NET 6 zu beheben. Das neue Verhalten entspricht dem .NET 5-Verhalten.

Die meisten Entwickler werden von dieser Änderung nicht betroffen sein, da es zuvor fehlerhaftes Verhalten korrigiert. Im unwahrscheinlichen Fall, dass Sie sich darauf verlassen haben, dass ein Präfix, das enthält __ , nicht mit einer Umgebungsvariable übereinstimmt, die enthält __, erwägen Sie, die Präfixe dieser Variablen zu ändern.

Betroffene APIs

Siehe auch