Arquivo de configuração MakePri.exe

Este tópico descreve o esquema do arquivo de configuração XML MakePri.exe ; também conhecido como arquivo de configuração PRI. A ferramenta MakePri.exe tem um comando createconfig que você pode usar para criar um novo arquivo de configuração PRI inicializado.

Observação

O MakePri.exe é instalado quando você verifica a opção SDK do Windows para Aplicativos Gerenciados UWP durante a instalação do Kit de Desenvolvimento de Software do Windows. Ele é instalado no demarcador %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe (bem como em pastas nomeadas para as outras arquiteturas). Por exemplo, C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe.

O arquivo de configuração PRI controla quais recursos são indexados e como. O XML de configuração deve estar em conformidade com o esquema a seguir.

<?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>
  • O default elemento especifica o contexto (linguagem, escala, contraste etc.) que deve ser usado para resolver recursos quando o contexto de runtime não corresponde a nenhum candidato a recurso. Como esse contexto é especificado no momento da compilação e não é alterado, os recursos são resolvidos para esse contexto à medida que os qualificadores são criados. A pontuação correspondente é armazenada no momento da compilação. Cada qualificador deve ter algum valor especificado. Consulte ResourceContext para obter detalhes sobre como os recursos são escolhidos.
  • O index elemento define passagens de indexação discretas que são feitas sobre os ativos. Cada passagem de indexação determina os indexadores específicos do formato a serem usados e quais recursos indexar.
  • O qualifiers elemento define os qualificadores iniciais para o primeiro arquivo ou pasta que outros recursos herdam. Cada elemento qualificador deve ter um nome e um valor válidos (consulte Personalizar seus recursos para idioma, escala, alto contraste e outros qualificadores).
  • O root atributo é a raiz do caminho do arquivo físico para a passagem de índice. Pode ser relativo ou absoluto. Se relativo, ele será acrescentado à raiz do projeto que você fornece na linha de comando. Se absoluto, ele é usado diretamente como a raiz de passagem de índice. Barras para trás ou para frente são aceitáveis. As barras à direita são cortadas. A raiz da passagem de índice determina a pasta à qual todos os recursos são considerados relativos.
  • O startIndexAt atributo é o arquivo ou pasta inicial usado na indexação. É relativo à raiz de passagem de índice. Um valor vazio pressupõe a pasta raiz de passagem de índice.

Arquivo de configuração PRI padrão

MakePri.exe gera esse novo arquivo de configuração PRI inicializado quando o comando createconfig é emitido.

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

Elemento de embalagem

O packaging elemento define as informações de divisão de PRI. O esquema do packaging elemento é definido para configuração automática (suporte para autoResourcePackage ao longo de uma dimensão específica) e manual.

Este exemplo mostra como usar autoResourcePackage ao longo de uma dimensão específica.

	<packaging>
		<autoResourcePackage qualifier="Language"/>
		<autoResourcePackage qualifier="Scale"/>
		<autoResourcePackage qualifier="DXFeatureLevel"/>
	</packaging>

Este exemplo mostra como usar o .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 não bloqueia explicitamente a geração de arquivos PRI de recurso em nenhuma dimensão específica. As restrições ao longo de um determinado conjunto de dimensões são definidas e implementadas externamente por MakeAppx.exe ou outras ferramentas no pipeline.

MakePri.exe analisa o packaging elemento após todos os index nós para preencher todos os qualificadores padrão. MakePri.exe coleta informações analisadas nessas estruturas de dados.

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 atributo

Esse atributo define um sinalizador no arquivo PRI que faz com que

  • Mesclagem de implantação para identificar que esse arquivo PRI pode ser mesclado.
  • GetFullyQualifiedReference para retornar um erro caso esse sinalizador esteja definido e o gerenciador de recursos tenha sido inicializado com um arquivo.

O valor padrão desse atributo é true. MakePri.exe só define o sinalizador na PRI se você tiver como destino o Windows 10.

Recomendamos que você omita isDeploymentMergeable (ou defina explicitamente como true) para a criação do pacote de recursos se você for direcionado Windows 10.

MakePri.exe adiciona o valor de ao arquivo de isDeploymentMergeable despejo se makepri dump for executado com a /dt detailed opção.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
	<PriHeader>
		...
		<IsDeploymentMergeable>true</IsDeploymentMergeable>
		...
	</PriHeader>
  ...
</PriInfo>

resources@majorVersion atributo

O valor padrão para esse atributo é 1. Se você fornecer um valor explícito e também usar a opção de linha de comando obsoleta /VersionMajor(vma) para a ferramenta MakePri.exe, o valor no arquivo de configuração terá precedência.

Veja um exemplo.

<resources majorVersion="2">
  <packaging ... />
  <index root="\" startIndexAt="\">
    ...
  </index>
</resources>

resources@targetOsVersion atributo

Indica a versão do sistema operacional de destino. A tabela abaixo mostra os valores com suporte; O valor padrão é 6.3.0.

Valor Significado
10.0.0 Windows 10
6.3.0 (padrão) Windows 8.1
6.2.1 Windows 8

Veja um exemplo.

<resources targetOsVersion="10.0.0">
  <packaging ... />
  <index root="\" startIndexAt="\">
    ...
  </index>
</resources>

Observação O Windows é compatível com versões anteriores em relação aos arquivos PRI; mas nem sempre é compatível com versões posteriores.

MakePri.exe adiciona o valor de ao arquivo de targetOsVersion despejo se makepri dump for executado com a /dt detailed opção.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
	<PriHeader>
		...
		<TargetOS version="10.0.0"/>
		...
	</PriHeader>
  ...
</PriInfo>

Mensagens de erro de validação

Aqui estão alguns exemplos de condições de erro e a mensagem de erro correspondente.

Condição Severidade Mensagem
Um targetOsVersion diferente de um dos valores com suporte é especificado. Erro Configuração inválida: targetOsVersion inválido especificado.
Um targetOsVersion de "6.2.1" é especificado e um packaging elemento está presente. Erro Configuração inválida: não há suporte para o nó 'Packaging' com este targetOsVersion.
Mais de um modo encontrado na configuração. Por exemplo, Manual e AutoResourcePackage especificados. Erro Configuração inválida: o nó 'empacotamento' não pode ter mais de um modo de operação.
Um qualificador padrão é listado em pacote de recursos. Erro Configuração inválida: <Qualifiername>=<QualifierValue> é um qualificador padrão e seus candidatos não podem ser adicionados a um pacote de recursos.
O qualificador AutoResourcePackage contém vários qualificadores. Por exemplo, language_scale. Erro Configuração inválida: não há suporte para AutoResourcePackage com vários qualificadores.
ResourcePackage QualifierSet contém vários qualificadores. Por exemplo, language-en-us_scale-100 Erro Configuração inválida: não há suporte para QualifierSet com vários qualificadores.
Nome do pacote de recursos duplicado encontrado. Erro Configuração inválida: nome do pacote <de recursos duplicado rpname>.
Mesmo conjunto de qualificadores definido em dois pacotes de recursos. Erro Configuração inválida: várias instâncias de "<tags de qualificador>" do QualifierSet encontradas.
Nenhum candidato é encontrado para o QualifierSet listado para o nó 'ResourcePackage'. Aviso Configuração inválida: nenhum candidato encontrado para <o nome> do pacote de recursos.
Nenhum candidato encontrado para o qualificador listado no nó 'AutoResourcePackage'. Aviso Configuração inválida: Nenhum candidato encontrado para o nome> do qualificador do qualificador<. Pacote de recursos não gerado.
Nenhum dos modos é encontrado. Ou seja, nó de 'empacotamento' vazio encontrado. Aviso Configuração inválida: nenhum modo de empacotamento especificado.