Управление ресурсами с помощью MRT Core

MRT Core — это упрощенная версия современной системы управления ресурсами Windows, которая распространяется в составе Windows App SDK.

MRT Core имеет функции как во время сборки, так и во время выполнения. Во время построения система создает индекс всех различных вариантов ресурсов, которые упакованы с вашим приложением. Этот индекс называется индексом ресурсов пакета или PRI и также включается в пакет вашего приложения.

Предварительные требования

Чтобы использовать ОСНОВНЫЕ API MRT в Windows App SDK:

  1. Скачайте и установите последний выпуск Windows App SDK. Дополнительные сведения см. в статье Установка инструментов для Windows App SDK.
  2. Выполните инструкции по созданию простого проекта WinUI 3 или применению пакета SDK для приложений Windows в существующем проекте.

Дополнительные сведения о доступности MRT Core в Windows App SDK см. в разделе Каналы выпуска.

Файл индекса ресурсов пакета (PRI)

Каждый пакет приложения должен содержать двоичный индекс ресурсов приложения. Этот индекс создается во время сборки и содержится в одном или нескольких файлах PRI. Каждый PRI-файл содержит именованный набор ресурсов — карту ресурсов.

Файл PRI содержит фактические строковые ресурсы. Внедренные двоичные ресурсы и ресурсы пути к файлам индексируются непосредственно из файлов проекта. Пакет обычно содержит один PRI-файл для каждого языка с именем resources.pri. Файл resources.pri в корне каждого пакета автоматически загружается при создании экземпляра объекта ResourceManager .

PRI-файлы содержат только данные, поэтому они не используют переносимый исполняемый формат (PE). Они специально предназначены для работы только с данными.

Примечание

Для приложений .NET в Windows App SDK версии 0.8 и более поздних версиях свойство Файл действия сборки для файлов ресурсов в Visual Studio устанавливается автоматически, что сокращает необходимость в настройке проекта вручную. В версии 1.0 появилась проблема 1674. Это исправлено в версии 1.1 (из стабильного канала), но для исправления требуется пакет SDK для .NET 6.0.300 или более поздней версии. Если вы используете более раннюю версию пакета SDK для .NET, продолжайте использовать обходной путь в заметках о выпуске 1.0.

Доступ к ресурсам приложения с помощью MRT Core

MRT Core предоставляет несколько различных способов доступа к ресурсам приложения.

Примечание

В Windows App SDK 1.0, предварительная версия 1 и более поздних версий API-интерфейсы MRT Core находятся в пространстве имен Microsoft.Windows.ApplicationModel.Resources. В более ранних выпусках они находятся в пространстве имен Microsoft.ApplicationModel.Resources .

Основные функциональные возможности с Помощью ResourceLoader

Самый простой способ программного доступа к ресурсам приложения — использовать класс ResourceLoader . ResourceLoader обеспечивает базовый доступ к строковым ресурсам из набора файлов ресурсов, библиотек, на которые имеются ссылки, или других пакетов.

Расширенные функциональные возможности с помощью ResourceManager

Класс ResourceManager предоставляет дополнительные сведения о ресурсах, такие как перечисление и проверка. Класс ResourceLoader такую возможность не предоставляет.

Объект ResourceCandidate представляет собой одно конкретное значение ресурса и его квалификаторы, например строку Hello, world для английского языка или logo.scale-100.jpg как квалифицированный ресурс изображения, относящийся к разрешению scale-100.

Доступные приложению ресурсы хранятся в иерархических коллекциях, доступ к которым можно получить с помощью объекта ResourceMap. Класс ResourceManager предоставляет доступ к разным экземплярам ResourceMap верхнего уровня, используемым приложением, которые соответствуют разным пакетам приложения. Значение ResourceManager.MainResourceMap соответствует схеме ресурсов для текущего пакета приложения и исключает все пакеты платформы, на которые ссылается ссылка. Каждая карта ResourceMap носит имя пакета, которое указано в манифесте пакета. В ResourceMap находятся поддереви (см . Раздел ResourceMap.GetSubtree). Поддеревья обычно соответствуют файлам ресурсов, которые содержат ресурс.

ResourceManager не только поддерживает доступ к строковым ресурсам приложения, но и дает возможность перечислять и проверять различные файловые ресурсы. Чтобы избежать конфликтов между файлами и другими ресурсами, которые создаются внутри файла, все индексированные пути к файлам располагаются в зарезервированном поддереве Files в ResourceMap. Например, файл "\Images\logo.png" соответствует имени ресурса Files/images/logo.png.

Определение выбора ресурса с помощью ResourceContext

Ресурсы-кандидаты выбираются по конкретному ResourceContext — набору значений квалификаторов ресурсов (языка, масштаба, контрастности и т. п.). Контекст по умолчанию применяет текущую конфигурацию приложения к каждому значению квалификатора, если только он не будет переопределен. Например, такие ресурсы, как изображения, могут иметь квалификатор масштаба, который зависит от монитора и, следовательно, варьируется от одного представления приложения к другому. Поэтому каждое представление приложения имеет отдельный контекст по умолчанию. При получении ресурса-кандидата нужно передать экземпляр ResourceContext, чтобы получить наиболее подходящее значение для данного представления.

Образец

Пример, демонстрирующий использование API MRT Core, см. в примере MRT Core.

См. также раздел