Имена ресурсов в MRM
Каждый ресурс в MRM имеет имя. Имена ресурсов соответствуют IETF RFC 3986.
Имя ресурса в MRM имеет следующую форму:
ms-resource://<PackageFamilyName>/<Root>/<Rest...>
Где:
ms-resource
— это схема.<PackageFamilyName>
— это центр и является именем семейства пакетов приложения, которое будет использовать ресурсы или литеральную строку"Application"
для распакованных приложений.<Root>
— это один сегмент пути.<Rest...>
— один или несколько других сегментов пути, разделенных косой чертой.
Не допускаются части запроса и фрагмента URI.
Для краткости эта документация обычно относится к именам ресурсов без схемы или центра (например, strings/foo или просто foo).
Учет регистра
Хотя схема ms-resource
учитывает регистр, пути не являются.
Все следующие значения равны:
ms-resource:///FILES/LOGO.PNG
ms-resource:///files/logo.png
ms-resource:///FiLeS/LoGo.PnG
Но ниже приведены оба ошибки:
MS-RESOURCE:///files/logo.png
Ms-Resource:///files.logo.png
Если разные кандидаты ресурсов используют разные регистры, то тот, который отображается в файле PRI, зависит от реализации. Это не имеет значения, так как поиск ресурсов среды выполнения также не учитывает регистр.
Центр
Для удобства MRM позволяет URI ресурсов пропускать <PackageFamilyName>
при добавлении ресурса в индексатор. Кроме того, MRM позволяет указать любой допустимый центр в качестве <PackageFamilyName>
значения, указанного как packageFamilyName при создании индексатора ресурсов (дополнительные сведения см. в разделе MrmCreateResourceIndexer).
Например, если индексатор ресурсов был создан с помощью packageFamilyName"MyApp"
, то все следующие URI ресурсов эквивалентны:
ms-resource://MyApp/strings/foo // Canonical form.
ms-resource:///strings/foo // Omit the PFN.
ms-resource://App2/strings/foo // PFN "App2" is ignored.
Путь
Как указано в упрощенной грамматике выше, все имена ресурсов в MRM должны иметь по крайней мере два сегмента пути и <Root>
<Rest...>
. Это ошибка с одним сегментом пути в имени ресурса или завершением имени ресурса косой чертой. Ниже приведены ошибки.
ms-resource///hello // Error, only one path segment
ms-resource///strings/hello/ // Error, ends with a slash
Нет практического ограничения на количество сегментов пути, которые можно иметь, кроме ограничений на общую длину URI (обычно около 2000 символов). Все эти имена являются допустимыми именами ресурсов:
ms-resource:///strings/hello
ms-resource:///files/assets/logo.png
ms-resource:///food/baked/muffins/lemon.and.blueberry/gluten_free
Соглашения
Хотя ни в коем случае не требуется, в файлах PRI используются следующие соглашения.
- Строковые ресурсы добавляются в строки
<RootPath>
. - Ресурсы файлов добавляются в "файлы".
<RootPath>
- Ресурсы контейнера (например, ресурсы из
resw
файла) добавляются в ресурсы<RootPath>
.
Обратите внимание, что локализация XAML зависит от соглашения "resources" (см . директиву x:Uid для получения дополнительных сведений), а другие библиотеки также могут зависеть от этих соглашений.
Именование ресурсов для библиотек
При создании файлов PRI, которые должны быть частью повторно распространяемой библиотеки, важно выбрать имена ресурсов, которые вряд ли конфликтуют с именами родительского приложения (или других библиотек). Это связано с тем, что все ресурсы для приложения (включая ресурсы для зависимых библиотек) объединяются в один файл PRI во время сборки . Дополнительные сведения см. в разделе MrmIndexResourceContainerAutoQualifiers. Если одно и то же имя ресурса используется основным приложением и одной из ее библиотек (или двумя библиотеками), при создании PRI возникнет ошибка.
Чтобы избежать этого, рассмотрите возможность именовать ресурсы в путь, включающий уникальный сегмент, например обратное DNS-имя вашей компании или GUID.