MRT Core를 사용하여 리소스 관리

MRT Core는 Windows App SDK의 일부로 배포되는 최신 Windows 리소스 관리 시스템의 간소화된 버전입니다.

MRT Core에는 빌드 시간 및 런타임 기능이 모두 있습니다. 빌드 시 시스템은 앱과 함께 패키지되는 여러 변형의 모든 리소스에 대한 인덱스를 만듭니다. 이 인덱스는 PRI(패키지 리소스 인덱스)이며 앱 패키지에도 포함됩니다.

필수 조건

Windows App SDK에서 MRT Core API를 사용하려면 다음을 수행합니다.

  1. Windows App SDK의 최신 릴리스를 다운로드하여 설치합니다. 자세한 내용은 Windows 앱 SDK용 도구 설치를 참조하세요.
  2. 지침에 따라 첫 번째 WinUI 3 프로젝트를 만들거나 기존 프로젝트에서 Windows 앱 SDK를 사용합니다.

Windows App SDK의 MRT Core 가용성에 대해 자세히 알아보려면 릴리스 채널을 참조하세요.

PRI(패키지 리소스 인덱스) 파일

모든 앱 패키지는 앱 리소스의 이진 인덱스를 포함해야 합니다. 이 인덱스는 빌드 시 만들어지고 하나 이상의 PRI 파일에 포함됩니다. 각 PRI 파일에는 리소스 맵이라고 하는 명명된 리소스 컬렉션이 포함되어 있습니다.

PRI 파일은 실제 문자열 리소스를 포함합니다. 포함된 이진 및 파일 경로 리소스는 프로젝트 파일에서 직접 인덱싱됩니다. 패키지는 일반적으로 언어당 resources.pri라는 하나의 PRI 파일을 포함합니다. ResourceManager 개체가 인스턴스화되면 각 패키지 루트에 있는 resources.pri 파일이 자동으로 로드됩니다.

PRI 파일은 데이터만 포함하므로 PE(이식 가능한 실행 파일) 형식을 사용하지 않습니다. 이는 데이터 전용으로 특별히 설계되었습니다.

참고 항목

.NET 앱의 경우 Windows 앱 SDK 버전 0.8 이상에서는 Visual Studio의 리소스 파일에 대한 빌드 작업 파일 속성이 자동으로 설정되므로 수동 프로젝트 구성의 필요성이 줄어듭니다. 버전 1.0에 문제 1674가 도입되었습니다. 이 문제는 안정적인 채널에서 1.1로 수정되었지만 수정하려면 .NET SDK 6.0.300 이상이 필요합니다. 더 낮은 버전의 .NET SDK를 사용하는 경우 1.0 릴리스 정보에서 해결 방법을 계속 사용하세요.

MRT Core를 사용하여 앱 리소스에 액세스

MRT Core는 앱 리소스에 액세스하는 여러 가지 방법을 제공합니다.

참고 항목

Windows App SDK 1.0 미리 보기 1 이상 릴리스에서 MRT Core API는 Microsoft.Windows.ApplicationModel.Resources 네임스페이스에 있습니다. 이전 릴리스의 경우 Microsoft.ApplicationModel.Resources 네임스페이스에 있습니다.

ResourceLoader의 기본 기능

앱 리소스에 프로그래밍 방식으로 액세스하는 가장 간단한 방법은 ResourceLoader 클래스를 사용하는 것입니다. ResourceLoader는 리소스 파일, 참조된 라이브러리 또는 기타 패키지 세트의 문자열 리소스에 대한 기본 액세스를 제공합니다.

ResourceManager를 통한 고급 기능

ResourceManager 클래스는 열거 및 검사와 같은 리소스에 대한 추가 정보를 제공합니다. 이는 ResourceLoader 클래스가 제공하는 것 이상입니다.

ResourceCandidate 개체는 영어의 경우 "Hello World" 문자열 또는 scale-100 해상도에 해당하는 한정된 이미지 리소스인 "logo.scale-100.jpg"와 같은 구체적인 단일 리소스 값 및 해당 한정자를 나타냅니다.

앱에서 사용할 수 있는 리소스는 ResourceMap 개체를 사용하여 액세스할 수 있는 계층 구조 컬렉션에 저장됩니다. ResourceManager 클래스는 앱에 대한 다양한 패키지에 해당하는 앱에서 사용하는 다양한 최상위 ResourceMap 인스턴스에 대한 액세스를 제공합니다. ResourceManager.MainResourceMap 값은 현재 앱 패키지에 대한 리소스 맵에 해당하며, 참조된 모든 프레임워크 패키지를 제외합니다. 각 ResourceMap은 패키지의 매니페스트에 지정된 패키지 이름으로 지정됩니다. ResourceMap 내에는 하위 트리가 있습니다(ResourceMap.GetSubtree 참조). 하위 트리는 일반적으로 리소스가 포함된 리소스 파일에 해당합니다.

ResourceManager는 앱의 문자열 리소스에 대한 액세스를 지원할 뿐만 아니라 다양한 파일 리소스를 열거하고 검사하는 기능도 유지 관리합니다. 파일 및 파일 내에서 시작하는 다른 리소스 간의 충돌을 방지하기 위해 인덱싱된 파일 경로는 모두 예약된 "Files" ResourceMap 하위 트리 내에 있습니다. 예를 들어 '\Images\logo.png' 파일은 'Files/images/logo.png' 리소스 이름에 해당합니다.

ResourceContext를 통해 리소스 선택 한정

리소스 후보는 리소스 한정자 값(언어, 배율, 대비 등) 의 컬렉션인 특정 ResourceContext에 따라 선택됩니다. 기본 컨텍스트는 재정의되는 경우를 제외하고 각 한정자 값에 대한 앱의 현재 구성을 사용합니다. 예를 들어 이미지와 같은 리소스는 배율로 한정될 수 있으며, 이는 모니터에 따라 달라지므로 애플리케이션 보기마다 다를 수 있습니다. 이러한 이유로 각 애플리케이션 보기에는 고유한 기본 컨텍스트가 있습니다. 리소스 후보를 검색할 때마다 ResourceContext 인스턴스를 전달하여 지정된 보기에 가장 적합한 값을 얻어야 합니다.

예제

MRT Core API를 사용하는 방법을 보여 주는 샘플은 MRT Core 샘플을 참조하세요.

참고 항목