Creación de paquetes opcionales y conjuntos relacionados

Los paquetes opcionales tienen contenido que se puede integrar con un paquete principal. Son útiles para el contenido descargable (DLC), para dividir una aplicación grande que tenga restricciones de tamaño o para enviar cualquier contenido adicional aparte de la aplicación original. Para obtener más información sobre los paquetes opcionales, vea Entrada de blog: Ampliación de la aplicación mediante paquetes opcionales.

Los conjuntos relacionados son una extensión de paquetes opcionales. Los conjuntos relacionados permiten aplicar un conjunto estricto de versiones en paquetes principales y opcionales. Los conjuntos relacionados pueden tener editores diferentes de la aplicación principal si se implementa fuera de la Store. Para obtener más información sobre los conjuntos relacionados, vea Entrada de blog: Herramientas para crear un conjunto relacionado.

Todos los paquetes opcionales y conjuntos relacionados se ejecutan dentro del contenedor MSIX de la aplicación principal.

Requisitos previos

  • Visual Studio 2019 o Visual Studio 2017 (versión 15.1 o posterior)
  • Windows 10, versión 1703 o posterior
  • SDK de Windows 10, versión 1703 o posterior

A fin de obtener todas las herramientas de desarrollo más recientes, vea Descargas y herramientas para Windows 10.

Nota:

Para enviar una aplicación que use paquetes opcionales o conjuntos relacionados con Microsoft Store, necesitará permiso. Los paquetes opcionales y los conjuntos relacionados se pueden usar para aplicaciones empresariales de línea de negocio (LOB) o aplicaciones empresariales sin permiso del Centro de partners si no se envían a la Store. Para obtener el permiso necesario a fin de enviar una aplicación que usa paquetes opcionales y conjuntos relacionados, vea Soporte técnico para desarrolladores de Windows.

Código de ejemplo

Mientras lee este artículo, se recomienda seguir el ejemplo de código de paquete opcional en GitHub para comprender de forma práctica cómo funcionan los paquetes opcionales y los conjuntos relacionados en Visual Studio.

Paquetes opcionales

Para crear un paquete opcional en Visual Studio, deberá hacer lo siguiente:

  1. Asegúrese de que la versión mínima de la plataforma de destino de la aplicación esté establecida en la 10.0.15063.0 o una posterior.
  2. En el proyecto de paquete principal, abra el archivo Package.appxmanifest. Vaya a la pestaña "Empaquetado" y anote el nombre de familia de paquete, que es todo lo que hay antes del carácter "_".
  3. En el proyecto de paquete opcional, haga clic con el botón secundario en Package.appxmanifest y seleccione Abrir con > Editor de XML (texto).
  4. Busque el elemento <Dependencies> en el archivo. Agregue lo siguiente y reemplace [MainPackageDependency] por el nombre de familia de paquete del paso 2. Esto especificará que el paquete opcional depende del paquete principal.
    <uap3:MainPackageDependency Name="[MainPackageDependency]"/>
    

Nota:

Si quiere crear un paquete opcional desde otro publicador, deberá especificar el publicador de la aplicación principal si son diferentes. Al igual que <uap4:MainPackageDependency Name="Main_app" Publisher="CN=Contoso..." />. Esto no funcionará si está publicando en la Store.

Después de configurar las dependencias del paquete de los pasos 1 a 4, puede seguir desarrollando como lo haría normalmente. Para obtener más información, vea Entrada de blog: Compilación del primer paquete opcional.

Visual Studio se puede configurar para volver a implementar el paquete principal cada vez que implemente un paquete opcional. Para establecer la dependencia de compilación en Visual Studio, debe hacer lo siguiente:

  1. Haga clic con el botón secundario en el proyecto de paquete opcional y seleccione Compilar dependencias > Dependencias del proyecto....
  2. Compruebe el proyecto de paquete principal y seleccione "Aceptar".

Ahora, cada vez que escriba F5 o compile un proyecto de paquete opcional, Visual Studio compilará primero el proyecto de paquete principal. Esto garantizará que el proyecto principal y los opcionales estén sincronizados.

Un conjunto relacionado consta de un paquete principal y un paquete opcional que está estrechamente acoplado mediante metadatos especificados en el archivo .appxbundle o .msixbundle del paquete principal. Estos metadatos vinculan el paquete principal al paquete opcional (con el nombre del archivo .appxbundle + versión) y el paquete opcional al paquete principal (con el nombre independiente de la versión). Visual Studio le ayuda a obtener los metadatos correctos en los archivos.

El control de versiones de paquetes de un conjunto relacionado se sincroniza de forma que no permita que se use la versión más reciente de ningún paquete hasta que se instalen todos los paquetes de conjuntos relacionados (que especifica la versión en el paquete principal). Los paquetes se administran de forma independiente, pero es posible que los paquetes especificados en el conjunto no se usen hasta que se hayan actualizado todos ellos. Para obtener más información sobre los conjuntos relacionados, vea Entrada de blog: Herramientas para crear un conjunto relacionado.

A fin de configurar la solución de la aplicación para conjuntos relacionados, siga estos pasos:

  1. Haga clic con el botón secundario en el proyecto de paquete principal y seleccione Agregar > Nuevo elemento…
  2. En la ventana, busque las plantillas instaladas para ".txt" y agregue un nuevo archivo de texto.

    Importante

    El archivo de texto nuevo debe tener el nombre Bundle.Mapping.txt.

  3. En el archivo Bundle.Mapping.txt, escriba la cadena "[OptionalProjects]" seguida de las rutas de acceso relativas a los proyectos de paquete opcionales. A continuación, se muestra un archivo Bundle.Mapping.txt de ejemplo:
    [OptionalProjects]
    "..\ActivatableOptionalPackage1\ActivatableOptionalPackage1.vcxproj"
    "..\ActivatableOptionalPackage2\ActivatableOptionalPackage2.vcxproj"
    

Cuando la solución esté configurada de esta manera, Visual Studio creará un manifiesto de lote denominado AppxBundleManifest.xml para el paquete principal con todos los metadatos necesarios para los conjuntos relacionados.

Tenga en cuenta que, al igual que los paquetes opcionales, un archivo Bundle.Mapping.txt para conjuntos relacionados solo funcionará en Windows 10, versión 1703 o una posterior. Además, la versión mínima de la plataforma de destino de la aplicación debe establecerse en la 10.0.15063.0 o una posterior.

Eliminación de paquetes opcionales

Los usuarios pueden ir a su aplicación de Configuración y eliminar los paquetes opcionales. Del mismo modo, los desarrolladores pueden usar RemoveOptionalPackageAsync para eliminar una lista de paquetes opcionales.

PackageCatalog catalog = PackageCatalog.OpenForCurrentPackage();
List<string> optionalList = new List<string>();
optionalList.Add("FabrikamAgeAnalysis_kwpnjs8c36mz0");
    
// Warn user that application will be restarted. 
var result = await catalog.RemoveOptionalPackagesAsync(optionalList);
if (result.ExtendedError != null)
{
    throw removalResult.ExtendedError;
}

Nota:

En el caso de un conjunto relacionado, la plataforma deberá reiniciar la aplicación principal para finalizar la eliminación a fin de evitar situaciones en las que la aplicación tenga contenido cargado desde el paquete que se va a quitar. Las aplicaciones deben notificar a los usuarios que la aplicación tendrá que reiniciarse antes de que la aplicación llame a la API.

Si el paquete opcional solo es contenido, el desarrollador debe indicar explícitamente a la plataforma que el paquete que está a punto de eliminar no la está usando la aplicación antes de que el desarrollador elimine el paquete opcional. Esto también permite al desarrollador eliminar el paquete sin tener que reiniciar.

Problemas conocidos

Visual Studio no admite actualmente la depuración de un proyecto opcional de conjunto relacionado. Para solucionar este problema, puede implementar e iniciar la activación (Ctrl + F5) y asociar manualmente el depurador a un proceso. Para asociar el depurador, vaya al menú "Depurar" en Visual Studio, seleccione "Asociar al proceso..." y asocie el depurador al proceso de aplicación principal.