환경 변수 접두사

계층적 데이터:를 수준 구분 기호로 사용하여 나타냅니다. 그러나 환경 변수의 경우 : 문자는 모든 플랫폼에서 지원되는 __로 정규화됩니다. 이 변경 내용은 정규화된 접두사 및 정규화되지 않은 접두사와 키를 비교하는 방법에 영향을 줍니다. 특히 이제 : 또는 __을 구분 기호로 포함하는 접두사를 지정하여 환경 변수를 추가할 수 있습니다. 두 구문은 일치하는 접두사와 : 또는 __이 오는 경우와 일치하는 환경 변수를 찾습니다. 이론적으로 이전에 해당 필터와 일치하지 않았던 일부 환경 변수는 이제 필터와 일치할 수 있습니다.

도입된 버전

.NET 7 미리 보기 4

이전 동작

이전에는 다음 코드가 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

MY_PREFIX__ConfigKey 환경 변수를 구성에 추가하려면 __ 대신 : 구분 기호를 사용하여 환경 변수를 추가해야 했습니다.

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

새 동작

.NET 7부터 다음 코드는 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

호환성이 손상되는 변경의 형식

이 변경은 이진 호환성에 영향을 줄 수 있습니다.

변경 이유

이 변경은 .NET 6에서 환경 변수 접두사 필터를 정규화하기 위한 의도하지 않은 동작 변경을 수정하기 위해 수행되었습니다. 새 동작은 .NET 5 동작과 일치합니다.

대부분의 개발자는 이전에 잘못된 동작이 수정되므로 이 변경의 영향을 받지 않습니다. 드문 경우지만 __이 포함된 접두사가 __이 포함된 환경 변수와 일치하지 않는다는 사실이 중요하다면 해당 변수의 접두사를 변경하는 것이 좋습니다.

영향을 받는 API

참고 항목