.NET Framework 4.6.2를 대상으로 하는 앱부터 .NET Framework의 경로 정규화가 변경되었습니다.
경로 정규화란?
경로를 정규화하려면 대상 운영 체제에서 유효한 경로를 준수하도록 경로 또는 파일을 식별하는 문자열을 수정해야 합니다. 정규화에는 일반적으로 다음이 수행됩니다.
구성 요소 및 디렉터리 구분 기호 정규화
상대 경로에 현재 디렉터리 적용
경로의 상대 디렉터리(
.
) 또는 부모 디렉터리(..
)를 평가합니다.지정된 문자 자르기
변경 내용
.NET Framework 4.6.2를 대상으로 하는 앱부터 다음과 같은 방법으로 경로 정규화가 변경되었습니다.
런타임은 운영 체제의 GetFullPathName 함수를 지연시켜 경로를 정규화합니다.
정규화 중에 더 이상 디렉터리 세그먼트의 끝(예: 디렉터리 이름 끝의 공백)이 잘리지 않습니다.
완전 신뢰의 디바이스 경로 구문(
\\.\
포함) 지원 및 mscorlib.dll\\?\
에서 파일 I/O API 지원런타임에서 디바이스 구문 경로가 유효한지 확인하지 않습니다.
대체 데이터 스트림에 액세스하기 위해 디바이스 구문을 사용할 수 있습니다.
영향
.NET Framework 4.6.2 이상을 대상으로 하는 앱의 경우 이러한 변경 내용은 기본적으로 설정됩니다. 메서드가 이전에 액세스할 수 없는 경로에 액세스할 수 있도록 허용하면서 성능을 향상시켜야 합니다.
.NET Framework 4.6.1 이하 버전을 대상으로 하지만 .NET Framework 4.6.2 이상에서 실행되는 앱은 이러한 변경에 의해 영향을 받지 않습니다.
완화 방법
.NET Framework 4.6.2 이상을 대상으로 하는 앱은 이 변경을 옵트아웃하고 애플리케이션 구성 파일의 런타임< 섹션에 다음>을 추가하여 레거시 정규화를 사용할 수 있습니다.
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>
.NET Framework 4.6.1 이하를 대상으로 하지만 .NET Framework 4.6.2 이상에서 실행되는 앱은 애플리케이션 .configuration 파일의 런타임< 섹션에 다음 줄을> 추가하여 경로 정규화를 변경할 수 있습니다.
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>
참고하십시오
.NET