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, etcetera).) deben invalidar el comportamiento predeterminado de una agrupación de aplicaciones y crear 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 lenguaje, la escala y el nivel de características 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 la 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 escalar 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 Incluir recursos en un paquete de aplicación básicamente aumenta 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 un paquete de aplicaciones normal como de costumbre.
Puede configurar Visual Studio para compilar recursos en el paquete de la aplicación de una de estas dos maneras. Puede agregar un archivo de configuración al proyecto o editar el archivo de proyecto directamente. Use cualquiera de estas opciones con las que se sienta más cómodo o lo que mejor funcione con el sistema de compilación.
Opción 1. Uso de priconfig.packaging.xml para compilar recursos en el paquete de la aplicación
- En Visual Studio, agregue un nuevo elemento al proyecto. Elija Archivo XML y asigne al archivo
priconfig.packaging.xml
el nombre . - 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. - Reemplace el contenido del archivo por este XML.
<packaging> <autoResourcePackage qualifier="Language" /> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- 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 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>
- Guarde y cierre el archivo y recompile el proyecto.
Para confirmar que se tienen en cuenta las opciones de división automática, 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 paso final 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, consulte 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 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
en última instancia influye 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 optar por realizar 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>
Este es el aspecto que tiene después de eliminar el nombre del primer calificador.
<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
Guarde y cierre y recompile el proyecto.
Hay un paso final 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, consulte Especificar los recursos predeterminados que usa la aplicación. Esto es lo que el archivo de proyecto contendrá si incluyeste recursos para inglés, español y francés en el paquete de la aplicación.
<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>