Compartir a través de


"Integra los recursos en tu paquete de 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 de (.appxbundle), solo los recursos predeterminados para el idioma, 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 adecuados para la escala y para el nivel de características de DirectX. Para la mayoría de las aplicaciones, este comportamiento constituye una eficacia valiosa y es lo que usted y el cliente quieren suceder.

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 aumenta esencialmente 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. Utiliza priconfig.packaging.xml para integrar 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 el nombre priconfig.packaging.xml.
  2. En el Explorador de soluciones, seleccione priconfig.packaging.xml y active la ventana Propiedades. La Acción de generación del archivo debe establecerse en Ninguno y Copiar al 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 elemento <autoResourcePackage> indica a Visual Studio que divida automáticamente los recursos correspondientes al nombre de calificador dado en paquetes de recursos independientes. Esto se denomina división automática. Con el contenido del archivo que tienes hasta ahora, en realidad no has cambiado el comportamiento de Visual Studio. En otras palabras, Visual Studio ya se comportaba como si este archivo estuviera presente con este contenido porque son los valores predeterminados. Si no desea que Visual Studio divida automáticamente en un nombre de calificador, elimine ese elemento <autoResourcePackage> 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 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 de su elección en el paquete de la aplicación.

Hay un paso final que debe realizar. Pero solo si eliminó el nombre del calificador de Language. 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 tu priconfig.default.xml incluiría si estuvieras 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 esto?

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 Compilar recursos manualmente con MakePri.exe. Visual Studio pasa un archivo de configuración a MakePri.exe. El contenido del archivo priconfig.packaging.xml se usa como el 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 elemento <PropertyGroup>, agregue este XML.

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

Reemplace FILE-PATH-AND-NAME por 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 elemento <PropertyGroup>, 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 vuelva a compilar su proyecto.

Hay un paso final que debe realizar. Pero solo si eliminó el nombre del calificador de Language. 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>