Préfixes des variables d’environnement

Les données hiérarchiques sont représentées en utilisant : comme délimiteur de niveau. Cependant, pour les variables d’environnement, le caractère : est normalisé en __, car ce dernier est pris en charge sur toutes les plateformes. Ce changement affecte la façon dont les préfixes normalisés et non normalisés et les clés sont comparés. Plus précisément, vous pouvez maintenant ajouter des variables d’environnement en spécifiant un préfixe contenant : ou __ comme délimiteur. L’une et l’autre syntaxe va établit une correspondance avec toutes les variables d’environnement ayant un préfixe correspondant suivi de : ou de __. Certaines variables d’environnement qui auparavant ne correspondaient théoriquement pas au filtre peuvent maintenant correspondre au filtre.

Version introduite

.NET 7 Preview 4

Comportement précédent

Auparavant, le code suivant affichait 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

Pour que la variable d’environnement MY_PREFIX__ConfigKey soit ajoutée à la configuration, vous deviez ajouter des variables d’environnement en utilisant un délimiteur : au lieu de __ :

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

Nouveau comportement

À compter de .NET 7, le code suivant affiche 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

Type de changement cassant

Ce changement peut affecter la compatibilité binaire.

Raison du changement

Ce changement a été apporté pour corriger un changement de comportement involontaire pour la normalisation des filtres de préfixe de variable d’environnement dans .NET 6. Le nouveau comportement correspond au comportement de .NET 5.

La plupart des développeurs ne seront pas affectés par cette modification, car elle corrige un comportement précédemment erroné. Dans le cas peu probable où vous vous êtes appuyé sur le fait qu’un préfixe contenant __ ne correspond pas à une variable d’environnement contenant __, envisagez de modifier les préfixes de ces variables.

API affectées

Voir aussi