Windows Shell에서 시작되는 앱에 대한 ContentRootPath
IHostEnvironment.ContentRootPath 속성은 ASP.NET 앱을 포함하여 호스트된 애플리케이션에 appsettings.json 및 기타 콘텐츠 파일이 로드되는 기본 디렉터리를 나타냅니다. 이 속성 값의 기본값은 애플리케이션의 현재 작업 디렉터리인 Environment.CurrentDirectory입니다. 이 동작을 통해 동일한 앱이 다른 작업 디렉터리에서 실행되고 각 디렉터리의 콘텐츠를 사용할 수 있습니다.
작업 디렉터리를 지정하지 않고 Windows 프로세스(애플리케이션 또는 서비스)가 시작되면 이를 만든 프로세스의 작업 디렉터리가 사용됩니다. Windows Shell 또는 services.exe의 작업 디렉터리는 %windir%\system32(또는 System
특수 폴더)입니다. 해당 프로세스 중 하나가 호스트된 앱을 시작하면 ContentRootPath
속성이 %windir%\system32로 설정됩니다.
애플리케이션이 %windir%\system32 디렉터리에서 파일을 로드하려고 시도하지만 존재하지 않기 때문에 이 동작은 혼란스럽고 호스트된 애플리케이션이 실패하게 만듭니다. 예를 들어, 런타임 시 appsettings.json 파일을 찾을 수 없으며 설정이 적용되지 않습니다.
.NET 7부터 현재 디렉터리가 System
특수 폴더로 설정된 상태에서 호스트된 애플리케이션을 시작하면 기본적으로 ContentRootPath
속성이 AppContext.BaseDirectory로 설정됩니다.
도입된 버전
.NET 7
이전 동작
Host.CreateDefaultBuilder는 현재 디렉터리 값에 관계없이 ContentRootPath 속성의 기본값을 Environment.CurrentDirectory로 설정했습니다.
새 동작
Host.CreateDefaultBuilder는 Windows의 System
특수 폴더인 경우 더 이상 ContentRootPath 속성을 현재 디렉터리로 기본 설정하지 않습니다. 대신 애플리케이션의 기본 디렉터리가 사용됩니다.
호환성이 손상되는 변경의 형식
이 변경은 이진 호환성에 영향을 줄 수 있습니다.
변경 이유
앱 개발자는 특정한 경우(예: 앱이 MSIX로 패키징되었거나 시작 메뉴에서 시작된 경우)에 Windows에서 애플리케이션을 시작할 때 ContentRootPath가 C:\Windows\system32일 것이라고 예상하지 않았습니다. 이러한 경우에는 ContentRootPath 속성을 애플리케이션의 기본 디렉터리로 기본 설정하는 것이 더 좋습니다.
권장 작업
이전 동작을 사용하려면 IHostBuilder를 만들 때 ContentRootPath
속성을 명시적으로 설정할 수 있습니다.
Host
.CreateDefaultBuilder()
.UseContentRoot(Environment.CurrentDirectory)
....
영향을 받는 API
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기