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.
Action recommandée
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour