共用方式為


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」節點下,找不到限定詞的候選項目。 警告 無效的設定:找不到限定詞<限定詞名稱>的候選項目。 未產生資源套件。
找不到任何模式。 也就是說,找到空的「封裝」節點。 警告 無效的設定:未指定封裝模式。