Compilación de recursos en el paquete de la aplicación en lugar de en un paquete de recursos

Algunos tipos de aplicaciones (diccionarios multilingües, herramientas de traducción, etc.) deben invalidar el comportamiento predeterminado de una agrupación de aplicaciones y compilar recursos en el paquete de la aplicación en lugar de tenerlos en paquetes de recursos independientes (o paquetes de recursos). En este tema se explica cómo hacerlo.

De forma predeterminada, al compilar una agrupación de aplicaciones (.appxbundle), solo los recursos predeterminados para el idioma, la escala y el nivel de característica de DirectX están integrados en el paquete de la aplicación. Los recursos traducidos (y los recursos adaptados para escalas no predeterminadas o niveles de características de DirectX) están integrados en paquetes de recursos y solo se descargan en dispositivos que los necesitan. Si un cliente compra tu aplicación desde Microsoft Store con un dispositivo con una preferencia de idioma establecida en español, solo se descarga e instala la aplicación más el paquete de recursos español. Si ese mismo usuario cambia posteriormente su preferencia de idioma a francés en Configuración, el paquete de recursos francés de la aplicación se descarga e instala. Suceden cosas similares con los recursos calificados para el escalado y para el nivel de característica de DirectX. Para la mayoría de las aplicaciones, este comportamiento constituye una eficacia valiosa y es lo que usted y el cliente quieren pasar.

Pero si la aplicación permite al usuario cambiar el idioma sobre la marcha desde dentro de la aplicación (en lugar de a través de Configuración), ese comportamiento predeterminado no es adecuado. Realmente quieres que todos los recursos de idioma se descarguen e instalen incondicionalmente junto con la aplicación una vez y, a continuación, permanecen en el dispositivo. Quiere compilar todos esos recursos en el paquete de la aplicación en lugar de en paquetes de recursos independientes.

Nota La inclusión de recursos en un paquete de aplicación aumenta básicamente el tamaño de la aplicación. Por eso solo vale la pena hacerlo si la naturaleza de la aplicación lo exige. Si no es así, no es necesario hacer nada excepto crear una agrupación de aplicaciones normal como de costumbre.

Puede configurar Visual Studio para compilar recursos en el paquete de la aplicación de dos maneras. Puede agregar un archivo de configuración al proyecto o editar el archivo del proyecto directamente. Use cualquiera de estas opciones con las que esté más cómodo o lo que mejor funcione con el sistema de compilación.

Opción 1. Usar priconfig.packaging.xml para compilar recursos en el paquete de la aplicación

  1. En Visual Studio, agregue un nuevo elemento al proyecto. Elija Archivo XML y asigne al archivo priconfig.packaging.xmlel nombre .
  2. En Explorador de soluciones, seleccione priconfig.packaging.xml y compruebe el ventana Propiedades. La acción de compilación del archivo debe establecerse en Ninguno y Copiar en el directorio de salida debe establecerse en No copiar.
  3. Reemplace el contenido del archivo por este XML.
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. Cada <autoResourcePackage> elemento indica a Visual Studio que divida automáticamente los recursos del nombre del calificador especificado en paquetes de recursos independientes. Esto se denomina división automática. Con el contenido del archivo que tiene hasta ahora, no ha cambiado realmente el comportamiento de Visual Studio. En otras palabras, Visual Studio ya se comportó como si este archivo estuviera presente con este contenido porque estos son los valores predeterminados. Si no desea que Visual Studio se divida automáticamente en un nombre de calificador, elimine ese <autoResourcePackage> elemento del archivo. Este es el aspecto que tendría el archivo si quisiera que todos los recursos de idioma se integraran en el paquete de la aplicación en lugar de dividirse automáticamente en paquetes de recursos independientes.
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. Guarde y cierre el archivo y recompile el proyecto.

Para confirmar que las opciones de división automática se tienen en cuenta, busque el archivo <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml y confirme que su contenido coincide con sus opciones. Si lo hacen, ha configurado Correctamente Visual Studio para compilar los recursos que prefiera en el paquete de la aplicación.

Hay un último paso que debe realizar. Pero solo si eliminó el nombre del Language calificador. Debes especificar la unión de todos los idiomas admitidos de la aplicación como idioma predeterminado de la aplicación. Para obtener más información, consulta Especificar los recursos predeterminados que usa la aplicación. Esto es lo que priconfig.default.xml contendrá si estuviera incluyendo recursos para inglés, español y francés en el paquete de la aplicación.

   <default>
      <qualifier name="Language" value="en;es;fr" />
      ...
   </default>

¿Cómo funciona?

En segundo plano, Visual Studio inicia una herramienta denominada MakePri.exe para generar un archivo conocido como índice de recursos de paquete, que describe todos los recursos de la aplicación, incluida la indicación de los nombres de calificador de recursos en los que se dividirá automáticamente. Para obtener más información sobre esta herramienta, consulte Compile resources manualmente con MakePri.exe. Visual Studio pasa un archivo de configuración a MakePri.exe. El contenido del priconfig.packaging.xml archivo se usa como elemento <packaging> de ese archivo de configuración, que es la parte que determina la división automática. Por lo tanto, agregar y editar priconfig.packaging.xml influye en última instancia en el contenido del archivo de índice de recursos de paquete que Visual Studio genera para la aplicación, así como el contenido de los paquetes de la agrupación de aplicaciones.

Usar un nombre de archivo diferente al de priconfig.packaging.xml

Si asigna un nombre al archivo priconfig.packaging.xml, Visual Studio lo reconocerá y lo usará automáticamente. Si le asigna un nombre diferente, deberá informar a Visual Studio. En el archivo del proyecto, entre las etiquetas de apertura y cierre del primer <PropertyGroup> elemento, agregue este XML.

<AppxPriConfigXmlPackagingSnippetPath>FILE-PATH-AND-NAME</AppxPriConfigXmlPackagingSnippetPath>

Reemplace por FILE-PATH-AND-NAME la ruta de acceso a y el nombre del archivo.

Opción 2. Uso del archivo de proyecto para compilar recursos en el paquete de la aplicación

Esta es una alternativa a la opción 1. Una vez que comprenda cómo funciona la opción 1, puede elegir la opción 2 en su lugar si se adapta mejor al flujo de trabajo de desarrollo o compilación.

En el archivo del proyecto, entre las etiquetas de apertura y cierre del primer <PropertyGroup> elemento, agregue este XML.

<AppxBundleAutoResourcePackageQualifiers>Language|Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Aquí se muestra cómo se ve después de haber eliminado el primer nombre de calificador.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Guarde y cierre y recompile el proyecto.

Hay un último paso que debe realizar. Pero solo si eliminó el nombre del Language calificador. Debes especificar la unión de todos los idiomas admitidos de la aplicación como idioma predeterminado de la aplicación. Para obtener más información, consulta Especificar los recursos predeterminados que usa la aplicación. Este es el contenido del archivo del proyecto si incluyeste recursos para inglés, español y francés en el paquete de la aplicación.

<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>