Share via


File di configurazione MakePri.exe

In questo argomento viene descritto lo schema del file di configurazione XML MakePri.exe , noto anche come file di configurazione PRI. Lo strumento MakePri.exe include un comando createconfig che è possibile usare per creare un nuovo file di configurazione PRI inizializzato.

Nota

MakePri.exe viene installato quando si seleziona l'opzione Windows SDK for UWP Managed Apps durante l'installazione di Windows Software Development Kit. Viene installato nel percorso %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe (nonché nelle cartelle denominate per le altre architetture). Ad esempio, C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe.

Il file di configurazione PRI controlla quali risorse vengono indicizzate e come. Il codice XML di configurazione deve essere conforme allo schema seguente.

<?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>
  • L'elemento default specifica il contesto (lingua, scala, contrasto e così via) che deve essere usato per risolvere le risorse quando il contesto di runtime non corrisponde ad alcun candidato alla risorsa. Poiché questo contesto viene specificato in fase di compilazione e non cambia, le risorse vengono risolte in questo contesto durante la creazione dei qualificatori. Il punteggio corrispondente viene archiviato in fase di compilazione. Ogni qualificatore deve avere un valore specificato. Per informazioni dettagliate sulla scelta delle risorse, vedere ResourceContext .
  • L'elemento index definisce i passaggi di indicizzazione discreti eseguiti sugli asset. Ogni passaggio di indicizzazione determina gli indicizzatori specifici del formato da usare e le risorse da indicizzare.
  • L'elemento qualifiers imposta i qualificatori iniziali per il primo file o la cartella ereditata da altre risorse. Ogni elemento qualificatore deve avere un nome e un valore validi (vedere Adattare le risorse per lingua, scalabilità, contrasto elevato e altri qualificatori).
  • L'attributo root è la radice del percorso del file fisico per il passaggio dell'indice. I percorsi possono essere relativi o assoluti. Se relativo, viene aggiunto alla radice del progetto fornito nella riga di comando. Se assoluto, viene usato direttamente come radice del passaggio dell'indice. Le barre rovesciata o rovesciata sono accettabili. Le barre finali vengono tagliate. La radice del passaggio di indice determina la cartella a cui tutte le risorse vengono considerate relative.
  • L'attributo startIndexAt è il file di inizializzazione o la cartella utilizzata nell'indicizzazione. È relativo alla radice del passaggio dell'indice. Un valore vuoto presuppone che la cartella radice del passaggio dell'indice.

File di configurazione PRI predefinito

MakePri.exe genera questo nuovo file di configurazione PRI inizializzato quando viene eseguito il comando createconfig.

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

L'elemento packaging definisce le informazioni di divisione PRI. Lo schema per l'elemento packaging è definito sia per il supporto automatico (per autoResourcePackage lungo una dimensione specifica) che per la configurazione manuale.

In questo esempio viene illustrato come utilizzare autoResourcePackage lungo una dimensione specifica.

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

In questo esempio viene illustrato come utilizzare resourcePackage manuale.

  <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 non blocca in modo esplicito la generazione di file PRI di risorse lungo una dimensione specifica. Le restrizioni lungo un determinato set di dimensioni vengono definite e implementate esternamente da MakeAppx.exe o da altri strumenti nella pipeline.

MakePri.exe analizza l'elemento packaging dopo tutti i index nodi per popolare tutti i qualificatori predefiniti. MakePri.exe raccoglie informazioni analizzate in queste strutture di dati.

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.

attributo resources@isDeploymentMergeable

Questo attributo imposta un flag nel file PRI che causa

  • Merge della distribuzione per identificare che il file PRI può essere unito.
  • GetFullyQualifiedReference per restituire un errore nel caso in cui questo flag sia impostato e che il gestore risorse sia stato inizializzato con un file.

Il valore predefinito di questo attributo è true. MakePri.exe imposta il flag solo in PRI se la destinazione è Windows 10.

Ti consigliamo di omettere isDeploymentMergeable (o impostarlo in modo esplicito su true) per la creazione del pacchetto di risorse se hai come destinazione Windows 10.

MakePri.exe aggiunge il valore di isDeploymentMergeable al file dump se makepri dump viene eseguito con l'opzione /dt detailed .

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

attributo resources@majorVersion

Il valore predefinito di questo attributo è 1. Se si specifica un valore esplicito e si usa anche l'opzione della riga di comando deprecata /VersionMajor(vma) per lo strumento MakePri.exe, il valore nel file di configurazione ha la precedenza.

Ecco un esempio.

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

attributo resources@targetOsVersion

Indica la versione del sistema operativo di destinazione. La tabella seguente mostra i valori supportati; il valore predefinito è 6.3.0.

Valore Significato
10.0.0 Windows 10
6.3.0 (impostazione predefinita) Windows 8.1
6.2.1 Windows 8

Ecco un esempio.

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

Nota Windows è compatibile con le versioni precedenti rispetto ai file PRI, ma non sempre compatibile con l'inoltro.

MakePri.exe aggiunge il valore di targetOsVersion al file dump se makepri dump viene eseguito con l'opzione /dt detailed .

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

Messaggii di errore convalida

Di seguito sono riportate alcune condizioni di errore di esempio e il messaggio di errore corrispondente.

Condizione Gravità Message
Viene specificato un valore targetOsVersion diverso da uno dei valori supportati. Error Configurazione non valida: targetOsVersion non valido specificato.
Viene specificato un targetOsVersion di "6.2.1" e un packaging elemento è presente. Error Configurazione non valida: il nodo 'Packaging' non è supportato con questo targetOsVersion.
Più di una modalità trovata nella configurazione. Ad esempio, Manual e AutoResourcePackage specificati. Error Configurazione non valida: il nodo 'packaging' non può avere più di una modalità di funzionamento.
Un qualificatore predefinito è elencato nel pacchetto di risorse. Error Configurazione non valida: <Qualifiername>=<QualifierValue> è un qualificatore predefinito e i relativi candidati non possono essere aggiunti a un pacchetto di risorse.
Il qualificatore AutoResourcePackage contiene più qualificatori. Ad esempio, language_scale. Error Configurazione non valida: AutoResourcePackage con più qualificatori non è supportato.
ResourcePackage QualifierSet contiene più qualificatori. Ad esempio, language-en-us_scale-100 Error Configurazione non valida: QualifierSet con più qualificatori non è supportato.
Trovato il nome resourcepack duplicato. Error Configurazione non valida: nome <rpname> del pacchetto di risorse duplicato.
Stesso set di qualificatori definito in due pacchetti di risorse. Error Configurazione non valida: sono state trovate più istanze di QualifierSet "<tag di qualificatore>.
Non vengono trovati candidati per il nodo QualifierSet elencato per il nodo 'ResourcePackage'. Avviso Configurazione non valida: nessun candidato trovato per <Il nome> del pacchetto di risorse.
Nessun candidato trovato per il qualificatore elencato nel nodo 'AutoResourcePackage'. Avviso Configurazione non valida: nessun candidato trovato per il nome <nome qualificatore>. Pacchetto di risorse non generato.
Nessuna delle modalità trovate. Ovvero, trovato un nodo "packaging" vuoto. Avviso Configurazione non valida: nessuna modalità di creazione pacchetti specificata.