Indexadores específicos de formato do MakePri.exeMakePri.exe format-specific indexers

Este tópico descreve os indexadores específicos de formato usados pela ferramenta MakePri.exe para gerar seu índice de recursos.This topic describes the format-specific indexers used by the MakePri.exe tool to generate its index of resources.

Observação

O MakePri.exe é instalado quando você verifica a opção SDK do Windows para aplicativos gerenciados UWP ao instalar o Software Development Kit do Windows.MakePri.exe is installed when you check the Windows SDK for UWP Managed Apps option while installing the Windows Software Development Kit. Ele é instalado no caminho %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe (bem como em pastas chamadas para outras arquiteturas).It is installed to the path %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe (as well as in folders named for the other architectures). Por exemplo, C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe.For example, C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe.

O MakePri.exe é normalmente usado com o comando new, versioned ou resourcepack.MakePri.exe is typically used with the new, versioned, or resourcepack commands. Consulte Opções de linha de comando do MakePri.exe.See MakePri.exe command-line options. Nesses casos, ele indexa os arquivos de origem para gerar um índice de recursos.In those cases it indexes source files to generate an index of resources. O MakePri.exe usa vários indexadores individuais para ler diferentes arquivos de recurso de origem ou contêineres de recursos.MakePri.exe uses various individual indexers to read different source resource files or containers for resources. O indexador mais simples é o indexador de pasta, que indexa o conteúdo de uma pasta, como imagens .jpg ou .png.The simplest indexer is the folder indexer, which indexes the contents of a folder, such as .jpg or .png images.

Você identifica indexadores específicos de formato especificando elementos <indexer-config> em um elemento <index> do Arquivo de configuração. do MakePri.exe.You identify format-specific indexers by specifying <indexer-config> elements within an <index> element of the MakePri.exe configuration file. O atributo type identifica o indexador específico de formato utilizado.The type attribute identifies the format-specific indexer that is used.

Os contêineres de recursos encontrados durante a indexação geralmente têm seu conteúdo indexado em vez de serem adicionados ao índice.Resource containers encountered during indexing usually get their contents indexed rather than being added to the index themselves. Por exemplo, os arquivos .resjson que o indexador de pasta encontra podem ser indexados ainda por um indexador .resjson; nesse caso, o próprio arquivo .resjson não aparece no índice.For example, .resjson files that the folder indexer finds may be further indexed by a .resjson indexer, in which case the .resjson file itself does not appear in the index. Observação um elemento <indexer-config> do indexador associado a esse contêiner deve ser incluído no arquivo de configuração para que isso aconteça.Note an <indexer-config> element for the indexer associated with that container must be included in the configuration file for that to happen.

Geralmente, os qualificadores encontrados em uma entidade contentora, como uma pasta ou um arquivo .resw, são aplicados a todos os recursos nela contidos, como os arquivos armazenados na pasta ou as cadeias de caracteres inseridas no arquivo .resw.Typically, qualifiers found on a containing entity—such as a folder or a .resw file—are applied to all resources within it, such as the files within the folder, or the strings within the .resw file.

PastaFolder

O indexador de pasta é identificado por um atributo type de FOLDER.The folder indexer is identified by a type attribute of FOLDER. Ele indexa o conteúdo de uma pasta e determina os qualificadores de recursos a partir dos nomes de pasta e de arquivo.It indexes the contents of a folder, and determines resource qualifiers from the folder and filenames. Seu elemento de configuração está em conformidade com o esquema a seguir.Its configuration element conforms to the following schema.

<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>

O atributo qualifierDelimiter especifica o caractere depois do qual os qualificadores serão especificados em um nome de arquivo, ignorando a extensão.The qualifierDelimiter attribute specifies the character after which qualifiers are specified in a filename, ignoring the extension. O padrão é ".".The default is ".".

PRIPRI

O indexador PRI é identificado por um atributo type do PRI.The PRI indexer is identified by a type attribute of PRI. Ele indexa o conteúdo de um arquivo PRI.It indexes the contents of a PRI file. Normalmente, você o utiliza ao indexar o recurso contido em outro assembly, DLL, SDK ou biblioteca de classes no PRI do app.You typically use it when indexing the resource contained within another assembly, DLL, SDK, or class library into the app's PRI.

Todos os nomes de recurso, qualificadores e valores contidos no arquivo PRI são mantidos diretamente no novo arquivo PRI.All resource names, qualifiers and values contained in the PRI file are directly maintained in the new PRI file. Entretanto, o mapa de recursos de nível superior não é mantido no PRI final.The top level resource map, however is not maintained in the final PRI. Os mapas de recursos são mesclados.Resource Maps are merged.

<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>

PriInfoPriInfo

O indexador PriInfo é identificado por um atributo type de PRIINFO.The PriInfo indexer is identified by a type attribute of PRIINFO. Ele indexa o conteúdo de um arquivo de despejo detalhado.It indexes the contents of a detailed dump file. Você gera um arquivo de despejo detalhado executando makepri dump com a opção /dt detailed.You produce a detailed dump file by running makepri dump with the /dt detailed option. O elemento de configuração do indexador está em conformidade com o esquema a seguir.The configuration element for the indexer conforms to the following schema.

<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>

Este elemento de configuração permite atributos opcionais para configurar o comportamento do indexador PriInfo.This configuration element allows for optional attributes to configure the behavior of the PriInfo indexer. O valor padrão de emitStrings e de emitPaths é true.The default value of emitStrings and emitPaths is true. Se emitStrings for true, os candidatos a recursos com o atributo type definido como "String" serão incluídos no índice; caso contrário, eles serão excluídos.If emitStrings is true then resource candidates with the type attribute set to "String" are be included in the index, otherwise they are excluded. Se 'emitPaths' for true, os candidatos a recursos com o atributo type definido como "Path" serão incluídos no índice; caso contrário, eles serão excluídos.If 'emitPaths' is true then resource candidates with the type attribute set to "Path" are included in the index, otherwise they are excluded.

Veja uma configuração de exemplo que inclui tipos de recurso String, mas ignora tipos de recurso Path.Here is an example configuration that includes String resource types but skips Path resource types.

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

Para ser indexado, um arquivo de despejo deve terminar com a extensão .pri.xml e estar em conformidade com o esquema a seguir.To be indexed, a dump file must end with the extension .pri.xml, and must conform to the following schema.

<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>

O MakePri.exe oferece suporte aos tipos de despejo "Basic", "Detailed", "Schema" e "Summary".MakePri.exe supports dump types 'Basic', 'Detailed', 'Schema', and 'Summary'. Para configurar o MakePri.exe para emitir o tipo de despejo que o indexador PriInfo pode ler, inclua "/DumpType Detailed" ao usar o comando dump.To configure MakePri.exe to emit the dump type that the PriInfo indexer can read, include "/DumpType Detailed" when using the dump command.

Vários elementos do arquivo .pri.xml são ignorados pelo MakePri.exe.Several elements of the .pri.xml file are skipped by MakePri.exe. Esses elementos são calculados durante a indexação ou são especificados no arquivo de configuração MakePri.exe.These elements are either computed during indexing, or are specified in the MakePri.exe configuration file. Os nomes de recurso, qualificadores e valores contidos no arquivo de despejo são mantidos diretamente no novo arquivo PRI.Resource names, qualifiers, and values that are contained within the dump file are directly maintained in the new PRI file. Entretanto, o mapa de recursos de nível superior não é mantido no PRI final.The top-level resource map, however, is not maintained in the final PRI. Os mapas de recursos são mesclados como parte da indexação.Resource Maps are merged as part of the indexing.

Este é um exemplo de um recurso do tipo String válido em um arquivo de despejo.This is an example of a valid String type resource from a dump file.

<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>

Este é um exemplo de um recurso do tipo Path válido com dois candidatos em um arquivo de despejo.This is an example of a valid Path type resource with two candidates from a dump file.

<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>

ResFilesResFiles

O indexador ResFiles é identificado por um atributo type de RESFILES.The ResFiles indexer is identified by a type attribute of RESFILES. Ele indexa o conteúdo de um arquivo .resfiles.It indexes the contents of a .resfiles file. Seu elemento de configuração está em conformidade com o esquema a seguir.Its configuration element conforms to the following schema.

<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>

O arquivo .resfiles é um arquivo de texto que contém uma lista simples de caminhos de arquivo.A .resfiles file is a text file containing a flat list of file paths. Um arquivo .resfiles pode conter comentários "//".A .resfiles file can contain "//" comments. Veja um exemplo.Here's an example.

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

ResJSONResJSON

O indexador ResJSON é identificado por um atributo type de RESJSON.The ResJSON indexer is identified by a type attribute of RESJSON. Ele indexa o conteúdo de um arquivo .resjson, que é um arquivo de recurso de cadeia de caracteres.It indexes the contents of a .resjson file, which is a string resource file. Seu elemento de configuração está em conformidade com o esquema a seguir.Its configuration element conforms to the following schema.

<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>

Um arquivo .resjson contém o texto JSON (consulte O tipo de mídia de aplicativo/json para JavaScript Object Notation (JSON)).A .resjson file contains JSON text (see The application/json Media Type for JavaScript Object Notation (JSON)). O arquivo deve conter um único objeto JSON com propriedades hierárquicas.The file must contain a single JSON object with hierarchical properties. Cada propriedade deve ser outro objeto JSON ou um valor de cadeia de caracteres.Each property must either be another JSON object or a string value.

As propriedades JSON com nomes que começam com um sublinhado ("") não são compiladas no arquivo PRI final, mas são mantidas no arquivo de log.JSON properties with names that begin with an underscore ("") are not compiled into the final PRI file, but are maintained in the log file.

O arquivo também pode conter comentários "//" que são ignorados durante a análise.The file can also contain "//" comments which are ignored during parsing.

O atributo initialPath coloca todos os recursos nesse caminho inicial, inserindo-o antes do nome do recurso.The initialPath attribute places all resources under this initial path by prepending it to the name of the resource. Normalmente, você usaria isso ao indexar recursos de bibliotecas de classes.You would typically use this when indexing class library resources. O padrão é em branco.The default is blank.

ResWResW

O indexador ResW é identificado por um atributo type de RESW.The ResW indexer is identified by a type attribute of RESW. Ele indexa o conteúdo de um arquivo .resw, que é um arquivo de recurso de cadeia de caracteres.It indexes the contents of a .resw file, which is a string resource file. Seu elemento de configuração está em conformidade com o esquema a seguir.Its configuration element conforms to the following schema.

<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>

O arquivo .resw é um arquivo XML em conformidade com o esquema a seguir.A .resw file is an XML file that conforms to the following schema.

  <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>

O atributo convertDotsToSlashes converte todos os caracteres de ponto (".") encontrados nos nomes de recurso (atributos de nome de elemento de dados) em barras ("/"), exceto quando os caracteres de ponto estão entre "[" e "]".The convertDotsToSlashes attribute converts all dot (".") characters found in resource names (data element name attributes) to a forward slash "/", except when the dot characters are between a "[" and "]".

O atributo initialPath coloca todos os recursos nesse caminho inicial, inserindo-o antes do nome do recurso.The initialPath attribute places all resources under this initial path by prepending it to the name of the resource. Normalmente, você usa isso ao indexar recursos de bibliotecas de classes.You typically use this when indexing class library resources. O padrão é em branco.The default is blank.