Поделиться через


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

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

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

Необходимые компоненты

Чтобы использовать API MRT Core в пакете SDK для приложений Windows, выполните следующие действия.

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

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

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

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

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

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

Примечание.

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

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

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

Примечание.

В пакете SDK для приложений Windows 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 не только поддерживает доступ к строковым ресурсам приложения, но и поддерживает возможность перечисления и проверки различных файловых ресурсов. Чтобы избежать конфликтов между файлами и другими ресурсами, исходящими из файла, индексированные пути к файлам находятся в зарезервированном поддереве ResourceMap "Файлы". Например, файл \Images\logo.png соответствует имени ресурса Files/images/logo.png.

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

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

Пример

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

См. также