Файл конфигурации MakePri.exe
В этом разделе описывается схема файла конфигурации MakePri.exe XML; также называется файлом конфигурации PRI. Средство MakePri.exe имеет команду createconfig, которую можно использовать для создания нового инициализированного файла конфигурации PRI.
Примечание.
MakePri.exe устанавливается при проверке параметра windows SDK для управляемых приложений UWP при установке пакета средств разработки программного обеспечения Windows. Он устанавливается в путь %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe
(а также в папках с именем для других архитектур). Например, C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe
.
Файл конфигурации PRI определяет, какие ресурсы индексируются и как. XML конфигурации должен соответствовать следующей схеме.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="resources">
<xs:complexType>
<xs:sequence>
<xs:element name="packaging" maxOccurs="1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="autoResourcePackage" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:attribute name="qualifier" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="resourcePackage" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="qualifierSet" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:attribute name="definition" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" name="index">
<xs:complexType>
<xs:sequence>
<xs:element name="qualifiers" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" name="qualifier">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="default" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" name="qualifier">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="indexer-config" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
</xs:sequence>
<xs:attribute name="type" type="xs:string" use="required" />
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="root" type="xs:string" use="required" />
<xs:attribute name="startIndexAt" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="isDeploymentMergeable" type="xs:boolean" use="optional" />
<xs:attribute name="majorVersion" type="xs:positiveInteger" use="optional" />
<xs:attribute name="targetOsVersion" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:schema>
- Элемент
default
задает контекст (язык, масштаб, контрастность и т. д.), который следует использовать для разрешения ресурсов, если контекст среды выполнения не соответствует ни одному кандидату ресурсов. Так как этот контекст указан во время сборки и не изменяется, ресурсы разрешаются в этом контексте при создании квалификаторов. Соответствующая оценка хранится во время сборки. Каждый квалификатор должен иметь определенное значение. Дополнительные сведения о выборе ресурсов см. в разделе ResourceContext . - Элемент
index
определяет дискретные проходы индексирования, которые выполняются по ресурсам. Каждый проход индексирования определяет используемые индексаторы для конкретного формата и какие ресурсы следует индексировать. - Элемент
qualifiers
задает начальные квалификаторы для первого файла или папки, наследуемой другими ресурсами. Каждый элемент квалификатора должен иметь допустимое имя и значение (см. раздел "Настройка ресурсов" для языка, масштабирования, высокой контрастности и других квалификаторов). - Атрибут
root
является корнем пути физического файла для передачи индекса. Он может быть относительным или абсолютным. Если относительный, он добавляется в корневой каталог проекта, указанный в командной строке. Если абсолютный, он используется непосредственно в качестве корневого элемента передачи индекса. Косая косая черта или обратная косая черта допустимы. Косая косая черта обрезается. Корень передачи индекса определяет папку, к которой считаются относительные все ресурсы. - Атрибут
startIndexAt
— это начальный начальный файл или папка, используемые в индексировании. Он относится к корню передачи индекса. Пустое значение предполагает передачу корневой папки индекса.
Файл конфигурации PRI по умолчанию
MakePri.exe создает этот новый инициализированный файл конфигурации PRI при выдаче команды createconfig.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<packaging>
<autoResourcePackage qualifier="Language"/>
<autoResourcePackage qualifier="Scale"/>
<autoResourcePackage qualifier="DXFeatureLevel"/>
</packaging>
<index root="\" startIndexAt="\">
<default>
<qualifier name="Language" value="en-US"/>
<qualifier name="Contrast" value="standard"/>
<qualifier name="Scale" value="100"/>
<qualifier name="HomeRegion" value="001"/>
<qualifier name="TargetSize" value="256"/>
<qualifier name="LayoutDirection" value="LTR"/>
<qualifier name="Theme" value="dark"/>
<qualifier name="AlternateForm" value=""/>
<qualifier name="DXFeatureLevel" value="DX9"/>
<qualifier name="Configuration" value=""/>
<qualifier name="DeviceFamily" value="Universal"/>
<qualifier name="Custom" value=""/>
</default>
<indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/>
<indexer-config type="resw" convertDotsToSlashes="true" initialPath=""/>
<indexer-config type="resjson" initialPath=""/>
<indexer-config type="PRI"/>
</index>
<!--<index startIndexAt="Start Index Here" root="Root Here">-->
<!-- <indexer-config type="resfiles" qualifierDelimiter="."/>-->
<!-- <indexer-config type="priinfo" emitStrings="true" emitPaths="true" emitEmbeddedData="true"/>-->
<!--</index>-->
</resources>
Элемент упаковки
Элемент packaging
определяет сведения о разделении PRI. Схема элемента packaging
определяется как для автоматической (поддержки для определенного измерения), так и для autoResourcePackage
ручной настройки.
В этом примере показано, как использовать autoResourcePackage
определенное измерение.
<packaging>
<autoResourcePackage qualifier="Language"/>
<autoResourcePackage qualifier="Scale"/>
<autoResourcePackage qualifier="DXFeatureLevel"/>
</packaging>
В этом примере показано, как использовать вручную resourcePackage
.
<packaging>
<resourcePackage name="Germany">
<qualifierSet definition="lang-de-de"/>
<qualifierSet definition="lang-es-es"/>
</resourcePackage>
<resourcePackage name="France">
<qualifierSet definition="lang-fr-fr"/>
</resourcePackage>
<resourcePackage name="HighRes1">
<qualifierSet definition="scale-200"/>
</resourcePackage>
<resourcePackage name="HighRes2">
<qualifierSet definition="scale-400"/>
</resourcePackage>
</packaging>
MakePri.exe не блокирует явное создание файлов ресурсов PRI вдоль какого-либо конкретного измерения. Ограничения по определенному набору измерений определяются и реализуются внешними средствами MakeAppx.exe или другими средствами в конвейере.
MakePri.exe анализирует packaging
элемент после index
заполнения всех квалификаторов по умолчанию. MakePri.exe собирает данные, проанализированные в этих структурах данных.
enum ResourcePackageMode
{
None,
AutoPackQualifier,
ManualPack
}
ResourcePackageMode eResourcePackageMode;
list<string> RPQualifierList; // To store AutoResourcePackage Qualifiers
map<string, list<string>> RPNameToQSIMap; // To store ResourcePackage name to QualifierSet list mapping.
атрибут resources@isDeploymentMergeable
Этот атрибут задает флаг в файле PRI, который вызывает
- Слияние развертывания для определения возможности слияния этого файла PRI.
- GetFullyQualifiedReference для возврата ошибки в случае установки этого флага и инициализации диспетчера ресурсов с помощью файла.
Значение данного атрибута по умолчанию — true
. MakePri.exe только устанавливает флаг в PRI, если вы нацелены на Windows 10.
Рекомендуется пропустить isDeploymentMergeable
(или явно true
задать его) для создания пакета ресурсов, если вы нацелены на Windows 10.
MakePri.exe добавляет значение isDeploymentMergeable
в файл дампа, если makepri dump
выполняется с параметром /dt detailed
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
<PriHeader>
...
<IsDeploymentMergeable>true</IsDeploymentMergeable>
...
</PriHeader>
...
</PriInfo>
атрибут resources@majorVersion
Значение по умолчанию для этого атрибута равно 1. Если вы предоставляете явное значение, а также используете нерекомендуемый /VersionMajor(vma)
параметр командной строки для средства MakePri.exe, то значение в файле конфигурации имеет приоритет.
Рассмотрим пример.
<resources majorVersion="2">
<packaging ... />
<index root="\" startIndexAt="\">
...
</index>
</resources>
атрибут resources@targetOsVersion
Указывает целевую версию операционной системы. В таблице ниже показаны поддерживаемые значения; Значение по умолчанию — 6.3.0.
Значение | Значение |
---|---|
10.0.0 | Windows 10 |
6.3.0 (по умолчанию) | Windows 8.1 |
6.2.1 | Windows 8 |
Рассмотрим пример.
<resources targetOsVersion="10.0.0">
<packaging ... />
<index root="\" startIndexAt="\">
...
</index>
</resources>
Обратите внимание, что Windows совместима с файлами PRI, но не всегда совместима с пересылкой.
MakePri.exe добавляет значение targetOsVersion
в файл дампа, если makepri dump
выполняется с параметром /dt detailed
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
<PriHeader>
...
<TargetOS version="10.0.0"/>
...
</PriHeader>
...
</PriInfo>
Сообщения об ошибках проверки
Ниже приведены некоторые примеры условий ошибки и соответствующее сообщение об ошибке.
Condition | Важность | Сообщение |
---|---|---|
Указывается targetOsVersion, отличное от одного из поддерживаемых значений. | Ошибка | Недопустимая конфигурация: указан недопустимый targetOsVersion. |
Указан целевой объект TargetOsVersion 6.2.1, а packaging элемент присутствует. |
Ошибка | Недопустимая конфигурация: узел "Упаковка" не поддерживается для этого targetOsVersion. |
Несколько режимов, найденных в конфигурации. Например, указан вручную и AutoResourcePackage. | Ошибка | Недопустимая конфигурация: узел упаковки не может иметь несколько режимов работы. |
Квалификатор по умолчанию указан в пакете ресурсов. | Ошибка | Недопустимая конфигурация: <qualifiername>=<qualifierValue> по умолчанию является квалификатором по умолчанию, и его кандидаты не могут быть добавлены в пакет ресурсов. |
Квалификатор AutoResourcePackage содержит несколько квалификаторов. Например, language_scale. | Ошибка | Недопустимая конфигурация: AutoResourcePackage с несколькими квалификаторами не поддерживается. |
ResourcePackage QualifierSet содержит несколько квалификаторов. Например, language-en-us_scale-100 | Ошибка | Недопустимая конфигурация: qualifierSet с несколькими квалификаторами не поддерживается. |
Найдено повторяющееся имя resourcepack. | Ошибка | Недопустимая конфигурация: повторяющееся имя <пакета ресурсов rpname>. |
Один и тот же набор квалификатора, определенный в двух пакетах ресурсов. | Ошибка | Недопустимая конфигурация: найдено несколько экземпляров квалификатораSet "<тегов> квалификатора". |
Кандидаты не найдены для узла QualifierSet, указанного для узла ResourcePackage. | Предупреждение | Недопустимая конфигурация: кандидаты не найдены для <имени> пакета ресурсов. |
Кандидаты не найдены для квалификатора, указанного в узле AutoResourcePackage. | Предупреждение | Недопустимая конфигурация: кандидаты не найдены для квалификатора имени> квалификатора<. Пакет ресурсов не создан. |
Ни один из режимов не найден. То есть пустой узел упаковки найден. | Предупреждение | Недопустимая конфигурация: режим упаковки не указан. |