Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los datos jerárquicos se representan mediante :
como delimitador de nivel. Sin embargo, para las variables de entorno, el carácter :
se normaliza a __
, ya que este último es compatible con todas las plataformas. Este cambio afecta a la forma en que se comparan los prefijos y las claves normalizados y no normalizados. En concreto, ahora puede agregar variables de entorno especificando un prefijo que contenga :
o __
como delimitador. Cualquiera de las dos sintaxis coincidirá con cualquier variable de entorno con un prefijo coincidente seguido de :
o __
. Algunas variables de entorno que teóricamente no coincidieron con el filtro anteriormente ahora pueden coincidir con el filtro.
Versión introducida
.NET 7 Preview 4
Comportamiento anterior
Antes, el siguiente código imprimía 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
Para que la MY_PREFIX__ConfigKey
variable de entorno se agregue a la configuración, tenía que agregar variables de entorno mediante un delimitador de :
en lugar 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
Nuevo comportamiento
A partir de .NET 7, el código siguiente imprime 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
Tipo de cambio disruptivo
Este cambio puede afectar a la compatibilidad binaria.
Motivo del cambio
Este cambio se realizó para corregir un cambio de comportamiento involuntaria para normalizar los filtros de prefijo de variables de entorno en .NET 6. El nuevo comportamiento coincide con el comportamiento de .NET 5.
Acción recomendada
La mayoría de los desarrolladores no se verán afectados por este cambio, ya que corrige el comportamiento erróneo anteriormente. En el improbable caso de que se basase en el hecho de que un prefijo que contiene __
no coincide con una variable de entorno que contiene __
, considere cambiar los prefijos de esas variables.