Prefijos de variables de entorno
Los datos jerárquicos se representan usando :
como delimitador de nivel. Sin embargo, en las variables de entorno, el carácter :
se normaliza en __
, ya que este último es compatible en 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 se pueden agregar variables de entorno especificando un prefijo que contenga :
o __
como delimitador. Ambas sintaxis hallarán cualquier variable de entorno que tenga un prefijo coincidente seguido de :
o de __
. Algunas variables de entorno que en teoría no coincidían con el filtro anteriormente ahora sí pueden coincidir.
Versión introducida
.NET 7 (versión preliminar 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 variable de entorno MY_PREFIX__ConfigKey
pudiera agregarse a la configuración, había que agregar variables de entorno usando un delimitador :
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
Comportamiento nuevo
A partir de .NET 7, el siguiente código 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 importante
Este cambio puede afectar a la compatibilidad binaria.
Motivo del cambio
Este cambio se ha realizado con objeto de corregir un cambio de comportamiento inintencionado para normalizar los filtros de prefijos 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 anterior. En el improbable caso de que se haya basado en el hecho de que un prefijo que contiene __
no coincide con una variable de entorno que contiene __
, considere la posibilidad de cambiar los prefijos de esas variables.
API afectadas
Vea también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de