Compartir a través de


Prefijos de variables de entorno

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.

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.

Las APIs afectadas

Consulte también