共用方式為


MakePri.exe 格式特定的索引子

本主題描述 MakePri.exe 工具用來產生其資源索引的格式特定索引子。

注意

當您在檢查 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

MakePri.exe 通常會與newversionedresourcepack 命令搭配使用。 請參閱 MakePri.exe 命令列選項。 在這些情況下,其會編制來源檔案的索引,以產生資源的索引。 MakePri.exe 會使用各種個別索引子來讀取資源的不同來源資源檔案或容器。 最簡單的索引子是資料夾索引子,可編制資料夾內容的索引,例如 .jpg.png 影像。

您可以在 MakePri.exe 設定檔<index> 元素內指定 <indexer-config> 元素,以識別格式特定的索引子。 type 屬性會識別所使用的格式特定索引子。

在編制索引期間遇到的資源容器通常會為其內容編制索引,而不是新增至索引本身。 例如,資料夾索引子找到的 .resjson 檔案可能會由 .resjson 索引子進一步編制索引,在此情況下,.resjson 檔案本身不會出現在索引中。 附註與該容器相關聯索引子的 <indexer-config> 元素必須包含在組態檔中,才能發生此情況。

通常,在包含實體上找到的限定詞 (例如資料夾或 .resw 檔案) 會套用至其中的所有資源,例如資料夾內的檔案,或 .resw 檔案內的字串。

Folder

資料夾索引子是由 FOLDER 的 type 屬性所識別。 其會為資料夾的內容編制索引,並從資料夾和檔案名稱判斷資源限定詞。 其組態元素符合下列結構描述。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="ExclusionTypeList">
        <xs:restriction base="xs:string">
            <xs:enumeration value="path"/>
            <xs:enumeration value="extension"/>
            <xs:enumeration value="name"/>
            <xs:enumeration value="tree"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="FolderExclusionType">
        <xs:attribute name="type" type="ExclusionTypeList" use="required"/>
        <xs:attribute name="value" type="xs:string" use="required"/>
        <xs:attribute name="doNotTraverse" type="xs:boolean" use="required"/>
        <xs:attribute name="doNotIndex" type="xs:boolean" use="required"/>
    </xs:complexType>
    <xs:simpleType name="IndexerConfigFolderType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((f|F)(o|O)(l|L)(d|D)(e|E)(r|R))"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="indexer-config">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="exclude" type="FolderExclusionType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="type" type="IndexerConfigFolderType" use="required"/>
            <xs:attribute name="foldernameAsQualifier" type="xs:boolean" use="required"/>
            <xs:attribute name="filenameAsQualifier" type="xs:boolean" use="required"/>
            <xs:attribute name="qualifierDelimiter" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

qualifierDelimiter 屬性會指定檔案名稱中所指定限定詞之後的字元,並忽略副檔名。 預設值為「.」。

PRI

PRI 索引子是由 PRI 的 type 屬性所識別。 其會編制 PRI 檔案內容的索引。 當您將包含在另一個組件、DLL、SDK 或類別庫內的資源編制索引到應用程式的 PRI 時,通常會使用到。

PRI 檔案中包含的所有資源名稱、限定詞和值都會直接保留在新的 PRI 檔案中。 不過,最上層資源對應不會保留在最終 PRI 中。 資源對應會合併。

<xs:schema id="prifile" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="IndexerConfigPriType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((p|P)(r|R)(i|I))"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="indexer-config">
        <xs:complexType>
            <xs:attribute name="type" type="IndexerConfigPriType" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

PriInfo

PriInfo 索引子是由 PRIINFO 的 type 屬性所識別。 其會編制詳細傾印檔案內容的索引。 您可以使用 /dt detailed 選項執行 makepri dump 來產生詳細的傾印檔案。 索引子的組態元素符合下列結構描述。

<xs:schema id="priinfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:simpleType name="IndexerConfigPriInfoType">
    <xs:restriction base="xs:string">
      <xs:pattern value="((p|P)(r|R)(i|I)(i|I)(n|N)(f|F)(o|O))"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="indexer-config">
    <xs:complexType>
      <xs:attribute name="type" type="IndexerConfigPriInfoType" use="required"/>
      <xs:attribute name="emitStrings" type="xs:boolean" use="optional"/>
      <xs:attribute name="emitPaths" type="xs:boolean" use="optional"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

此組態元素允許選擇性屬性設定 PriInfo 索引子的行為。 emitStringsemitPaths 的預設值為 true。 如果 emitStringstrue,則索引中會包含設定為「String」type 屬性的資源候選項目,否則會將其排除。 如果「emitPaths」為 true 則索引中會包含設定為「String」type 屬性的資源候選項目,否則會將其排除。

以下是包含 String 資源類型的範例組態,但略過 Path 資源類型。

<indexer-config type="priinfo" emitStrings="true" emitPaths="false" />

若要編制索引,傾印檔案的結尾必須是副檔名 .pri.xml,且必須符合下列結構描述。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" >
  <xs:simpleType name="candidateType">
    <xs:restriction base="xs:string">
      <xs:pattern value="Path|String"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="scopeType">
    <xs:sequence>
      <xs:element name="ResourceMapSubtree" type="scopeType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="NamedResource" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Decision" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:anyAttribute processContents="skip" />
              </xs:complexType>
            </xs:element>
            <xs:element name="Candidate" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="QualifierSet" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Qualifier" minOccurs="0" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:attribute name="name" type="xs:string" use="required" />
                            <xs:attribute name="value" type="xs:string" use="required" />
                            <xs:attribute name="priority" type="xs:integer" use="required" />
                            <xs:attribute name="scoreAsDefault" type="xs:decimal" use="required" />
                            <xs:attribute name="index" type="xs:integer" use="required" />
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                      <xs:anyAttribute processContents="skip" />
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="Value" type="xs:string"  minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:attribute name="type" type="candidateType" use="required" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="name" use="required" type="xs:string" />
          <xs:anyAttribute processContents="skip" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" use="required" type="xs:string" />
    <xs:anyAttribute processContents="skip" />
  </xs:complexType>
  <xs:element name="PriInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="PriHeader" >
          <xs:complexType>
            <xs:sequence>
              <xs:any minOccurs ="0" maxOccurs="unbounded" processContents="skip" />
            </xs:sequence>
            <xs:anyAttribute processContents="skip" />
          </xs:complexType>
        </xs:element>
        <xs:element name="QualifierInfo">
          <xs:complexType>
            <xs:sequence>
              <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ResourceMap">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="VersionInfo">
                <xs:complexType>
                  <xs:anyAttribute processContents="skip" />
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="ResourceMapSubtree" type="scopeType" />
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required" />
            <xs:anyAttribute processContents="skip" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

MakePri.exe 支援傾印類型 'Basic'、'Detailed'、'Schema' 和 'Summary'。 若要將 MakePri.exe 設定為發出 PriInfo 索引子可讀取的傾印類型,請在使用 dump 命令時包含「/DumpType Detailed」。

MakePri.exe 會略過 .pri.xml 檔案的數個元素。 這些元素是在編制索引期間計算,或是在 MakePri.exe 組態檔中指定。 傾印檔案中包含的資源名稱、限定詞和值都會直接保留在新的 PRI 檔案內。 不過,最上層資源對應不會保留在最終 PRI 中。 資源對應會合併為索引編制的一部分。

這是傾印檔案中有效 String 類型資源的範例。

<NamedResource name="SampleString " index="96" uri="ms-resource://SampleApp/resources/SampleString ">
  <Decision index="2">
    <QualifierSet index="1">
      <Qualifier name="Language" value="EN-US" priority="900" scoreAsDefault="1.0" index="1"/>
    </QualifierSet>
  </Decision>
  <Candidate type="String">
    <QualifierSet index="1">
      <Qualifier name="Language" value="EN-US" priority="900" scoreAsDefault="1.0" index="1"/>
    </QualifierSet>
    <Value>A Sample String Value</Value>
  </Candidate>
</NamedResource>

這是一個有效的 Path 類型資源範例,其中包含傾印檔案中的兩個候選項目。

<NamedResource name="Sample.png" index="77" uri="ms-resource://SampleApp/Files/Images/Sample.png">
  <Decision index="2">
    <QualifierSet index="1">
      <Qualifier name="Scale" value="180" priority="500" scoreAsDefault="1.0" index="1"/>
    </QualifierSet>
    <QualifierSet index="2">
      <Qualifier name="Scale" value="140" priority="500" scoreAsDefault="0.7" index="2"/>
    </QualifierSet>
  </Decision>
  <Candidate type="Path">
    <QualifierSet index="1">
      <Qualifier name="Scale" value="180" priority="500" scoreAsDefault="1.0" index="1"/>
    </QualifierSet>
    <Value>Images\Sample.scale-180.png</Value>
  </Candidate>
  <Candidate type="Path">
    <QualifierSet index="2">
      <Qualifier name="Scale" value="140" priority="500" scoreAsDefault="1.0" index="1"/>
    </QualifierSet>
    <Value>Images\Sample.scale-140.png</Value>
  </Candidate>
</NamedResource>

ResFiles

ResFiles 索引子是由 RESFILES 的 type 屬性所識別。 其會編制 .resfiles 檔案內容的索引。 其組態元素符合下列結構描述。

<xs:schema id="resx" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="IndexerConfigResFilesType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((r|R)(e|E)(s|S)(f|F)(i|I)(l|L)(e|E)(s|S))"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="indexer-config">
        <xs:complexType>
            <xs:attribute name="type" type="IndexerConfigResFilesType" use="required"/>
            <xs:attribute name="qualifierDelimiter" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

.resfiles 檔案是包含一般檔案路徑清單的文字檔。 .resfiles 檔案可以包含「//」註解。 以下是範例。

Strings\component1\fr\elements.resjson
Images\logo.scale-100.png
Images\logo.scale-140.png
Images\logo.scale-180.png

ResJSON

ResJSON 索引子是由 RESJSON 的 type 屬性所識別。 其會編制 .resjson 檔案內容的索引,這是字串資源檔。 其組態元素符合下列結構描述。

<xs:schema id="resjson" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="IndexerConfigResJsonType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((r|R)(e|E)(s|S)(j|J)(s|S)(o|O)(n|N))"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="indexer-config">
        <xs:complexType>
            <xs:attribute name="type" type="IndexerConfigResJsonType" use="required"/>
            <xs:attribute name="initialPath" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

.resjson 檔案包含 JSON 文字 (請參閱 JavaScript 物件標記法 (JSON) 的應用程式/json 媒體類型)。 檔案必須包含具有階層式屬性的單一 JSON 物件。 每個屬性都必須是另一個 JSON 物件或字串值。

名稱開頭為底線 (「_」) 的 JSON 屬性不會編譯成最終 PRI 檔案,而是保留在記錄檔中。

檔案也可以包含剖析期間忽略的「//」註解。

initialPath 屬性會將所有資源放在此初始路徑之下,方法是將其加上資源的名稱。 在編制類別庫資源的索引時,您通常會使用此項目。 預設值是 blank。

ResW

ResW 索引子是由 RESW 的 type 屬性所識別。 其會編制 .resw 檔案內容的索引,這是字串資源檔。 其組態元素符合下列結構描述。

<xs:schema id="resw" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="IndexerConfigResxType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((r|R)(e|E)(s|S)(w|W))"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="indexer-config">
        <xs:complexType>
            <xs:attribute name="type" type="IndexerConfigResxType" use="required"/>
            <xs:attribute name="convertDotsToSlashes" type="xs:boolean" use="required"/>
            <xs:attribute name="initialPath" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

.resw 檔案是符合下列結構描述的 XML 檔案。

  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>

convertDotsToSlashes 屬性會將資源名稱 (data element name attributes) 中找到的所有點 (「.」) 字元轉換成正斜線「/」,但點字元介於「[」和「]」 之間時除外。

initialPath 屬性會將所有資源放在此初始路徑之下,方法是將其加上資源的名稱。 在編制類別庫資源的索引時,您通常會使用此項目。 預設值是 blank。