MakePri.exe 設定檔
本主題說明 MakePri.exe XML 設定檔的結構描述;也稱為 PRI 設定檔。 MakePri.exe 工具有 createconfig 命令,您可以使用它來建立新的、初始化的 PRI 設定檔。
注意
當您在檢查 Windows SDK for UWP Managed Apps 選項同時安裝 Windows 軟體發展工具組時,就會安裝 MakePri.exe。 其會安裝到 %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 設定檔
當發出 createconfig 命令時,MakePri.exe 會產生次此新的、初始化的 PRI 設定檔。
<?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 會剖析所有 index
節點後面的 packaging
元素以填入所有預設限定詞。 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 只有在以 Windows 10 為目標時,才會在 PRI 中設定旗標。
如果您的目標是 Windows 10,我們建議您在建立資源套件時忽略 isDeploymentMergeable
(或將其明確設為 true
)。
如果使用 /dt detailed
選項執行 makepri dump
,MakePri.exe 會將 isDeploymentMergeable
的值新增至傾印檔案。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
<PriHeader>
...
<IsDeploymentMergeable>true</IsDeploymentMergeable>
...
</PriHeader>
...
</PriInfo>
resources@majorVersion 屬性
這個屬性的預設值為 1。 如果您提供明確值,並且也使用 MakePri.exe 工具已取代的 /VersionMajor(vma)
命令列選項,則設定檔中的值優先。
以下是範例。
<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 檔案能回溯相容;但並非一律是向前相容。
如果使用 /dt detailed
選項執行 makepri dump
,MakePri.exe 會將 targetOsVersion
的值新增至傾印檔案。
<?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 不支援「Packaging」節點。 |
在設定中找到多個模式。 例如,已指定 Manual 和 AutoResourcePackage。 | 錯誤 | 無效的設定:「packaging」節點不能有一個以上的作業模式。 |
預設限定詞會列在資源套件底下。 | 錯誤 | 無效的設定:<Qualifiername>=<QualifierValue> 是預設限定詞,且其候選項目無法新增至資源套件。 |
AutoResourcePackage 限定詞包含多個限定詞。 例如,language_scale。 | 錯誤 | 無效的設定:不支援具有多個限定詞的 AutoResourcePackage。 |
ResourcePackage QualifierSet 包含多個限定詞。 例如,language-en-us_scale-100 | 錯誤 | 無效的設定:不支援具有多個限定詞的 QualifierSet。 |
找到重複的 resourcepack 名稱。 | 錯誤 | 無效的設定:重複的資源套件名稱 <rpname>。 |
在兩個資源套件中定義的相同限定詞集。 | 錯誤 | 無效的設定:找到 QualifierSet「<限定詞標籤>」的多個執行個體。 |
找不到針對「ResourcePackage」節點列出的 QualifierSet 候選項目。 | 警告 | 無效的設定:找不到<資源套件名稱>的候選項目。 |
在「AutoResourcePackage」節點下,找不到限定詞的候選項目。 | 警告 | 無效的設定:找不到限定詞<限定詞名稱>的候選項目。 未產生資源套件。 |
找不到任何模式。 也就是說,找到空的「封裝」節點。 | 警告 | 無效的設定:未指定封裝模式。 |