Share via


Archivo de configuración de MakePri.exe

En este tema se describe el esquema del archivo de configuración XML deMakePri.exe ; también conocido como archivo de configuración pri. La herramienta MakePri.exe tiene un comando createconfig que puede usar para crear un nuevo archivo de configuración PRI inicializado.

Nota:

MakePri.exe se instala al comprobar la opción Windows SDK para aplicaciones administradas para UWP al instalar el Kit de desarrollo de software de Windows. Se instala en la ruta %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe de acceso (así como en carpetas denominadas para las demás arquitecturas). Por ejemplo: C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe.

El archivo de configuración PRI controla qué recursos se indexan y cómo. El XML de configuración debe cumplir el esquema siguiente.

<?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>
  • El default elemento especifica el contexto (lenguaje, escala, contraste, etc.) que se debe usar para resolver los recursos cuando el contexto en tiempo de ejecución no coincide con ningún candidato de recursos. Dado que este contexto se especifica en tiempo de compilación y no cambia, los recursos se resuelven en este contexto a medida que se crean calificadores. La puntuación coincidente se almacena en tiempo de compilación. Cada calificador debe tener algún valor especificado. Consulte ResourceContext para obtener más información sobre cómo se eligen los recursos.
  • El index elemento define los pasos discretos de indexación que se realizan sobre los recursos. Cada paso de indexación determina los indexadores específicos del formato que se van a usar y qué recursos se van a indexar.
  • El qualifiers elemento establece los calificadores iniciales para el primer archivo o carpeta que heredan otros recursos. Cada elemento calificador debe tener un nombre y un valor válidos (vea Adaptar los recursos para el idioma, la escala, el contraste alto y otros calificadores).
  • El root atributo es la raíz de la ruta de acceso del archivo físico para el paso de índice. Puede ser relativo o absoluto. Si es relativo, se anexa a la raíz del proyecto que se proporciona en la línea de comandos. Si es absoluta, se usa directamente como raíz de paso de índice. Las barras diagonales inversas o posteriores son aceptables. Las barras diagonales finales se recortan. La raíz del paso de índice determina la carpeta a la que se consideran relativos todos los recursos.
  • El startIndexAt atributo es el archivo de inicialización o carpeta que se usa en la indexación. Es relativo a la raíz de paso del índice. Un valor vacío supone que el índice pasa la carpeta raíz.

Archivo de configuración de PRI predeterminado

MakePri.exe genera este nuevo archivo de configuración PRI inicializado cuando se emite el 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

El packaging elemento define la información de división pri. El esquema del packaging elemento se define tanto para automático (compatibilidad con autoResourcePackage una dimensión específica) como para la configuración manual.

En este ejemplo se muestra cómo usar autoResourcePackage a lo largo de una dimensión específica.

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

En este ejemplo se muestra cómo usar el manual 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 no bloquea explícitamente la generación de archivos PRI de recursos a lo largo de ninguna dimensión específica. Las restricciones a lo largo de un determinado conjunto de dimensiones se definen e implementan externamente mediante MakeAppx.exe u otras herramientas de la canalización.

MakePri.exe analiza el packaging elemento después de todos los index nodos para rellenar todos los calificadores predeterminados. MakePri.exe recopila información analizada en estas estructuras de datos.

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.

atributo resources@isDeploymentMergeable

Este atributo establece una marca en el archivo PRI que provoca

  • Combinación de implementación para identificar que este archivo PRI puede combinarse.
  • GetFullyQualifiedReference para devolver un error en caso de que se establezca esta marca y el administrador de recursos se haya inicializado con un archivo.

El valor predeterminado de este atributo es true. MakePri.exe solo establece la marca en PRI si tiene como destino Windows 10.

Se recomienda omitir isDeploymentMergeable (o establecerlo explícitamente en true) para la creación del paquete de recursos si tiene como destino Windows 10.

MakePri.exe agrega el valor del isDeploymentMergeable archivo de volcado de memoria si makepri dump se ejecuta con la /dt detailed opción .

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

atributo resources@majorVersion

El valor predeterminado de este atributo es 1. Si proporciona un valor explícito y también usa la opción de línea de comandos en desuso /VersionMajor(vma) para la herramienta de MakePri.exe, el valor del archivo de configuración tiene prioridad.

A continuación se muestra un ejemplo.

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

atributo resources@targetOsVersion

Indica la versión del sistema operativo de destino. En la tabla siguiente se muestran los valores admitidos; el valor predeterminado es 6.3.0.

Valor Significado
10.0.0 Windows 10
6.3.0 (valor predeterminado) Windows 8.1
6.2.1 Windows 8

A continuación se muestra un ejemplo.

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

Nota Windows es compatible con versiones anteriores con respecto a los archivos PRI; pero no siempre es compatible con reenvío.

MakePri.exe agrega el valor del targetOsVersion archivo de volcado de memoria si makepri dump se ejecuta con la /dt detailed opción .

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

Mensajes de error de validación

Estas son algunas condiciones de error de ejemplo y el mensaje de error correspondiente.

Condición severity Mensaje
Se especifica targetOsVersion distinto de uno de los valores admitidos. Error Configuración no válida: se especificó targetOsVersion no válido.
Se especifica targetOsVersion de "6.2.1" y hay un packaging elemento presente. Error Configuración no válida: no se admite el nodo "Empaquetado" con este targetOsVersion.
Se encontró más de un modo en la configuración. Por ejemplo, Manual y AutoResourcePackage especificados. Error Configuración no válida: el nodo 'packaging' no puede tener más de un modo de operación.
Un calificador predeterminado aparece en el paquete de recursos. Error Configuración no válida: <Qualifiername>=<QualifierValue> es un calificador predeterminado y sus candidatos no se pueden agregar a un paquete de recursos.
El calificador AutoResourcePackage contiene varios calificadores. Por ejemplo, language_scale. Error Configuración no válida: No se admite AutoResourcePackage con varios calificadores.
ResourcePackage QualifierSet contiene varios calificadores. Por ejemplo, language-en-us_scale-100 Error Configuración no válida: No se admite QualifierSet con varios calificadores.
Se encontró el nombre de resourcepack duplicado. Error Configuración no válida: nombre de <rpname> del paquete de recursos duplicado.
Mismo conjunto de calificadores definido en dos paquetes de recursos. Error Configuración no válida: se encontraron varias instancias de QualifierSet "<etiquetas> de calificador".
No se encuentra ningún candidato para el QualifierSet enumerado para el nodo "ResourcePackage". Advertencia Configuración no válida: no se encontraron candidatos para <el nombre> del paquete de recursos.
No se encontraron candidatos para calificadores enumerados en el nodo "AutoResourcePackage". Advertencia Configuración no válida: no se encontraron candidatos para el nombre> del calificador<. Paquete de recursos no generado.
No se encuentra ninguno de los modos. Es decir, se encontró el nodo "empaquetado" vacío. Advertencia Configuración no válida: no se ha especificado ningún modo de empaquetado.