Creación de extensiones de paquete para aplicaciones de SDK de Aplicaciones para Windows

Las extensiones de paquete expanden el modelo de extensión de aplicación al permitir un uso compartido de contenido más amplio entre paquetes. Un host de extensión de paquete puede aceptar extensiones de cualquier paquete, lo que lo convierte en adecuado para escenarios de extensibilidad de nivel de plataforma.

Note

Las extensiones de paquete requieren Windows 11 y usan el uap17 espacio de nombres . Para obtener un enfoque compatible con versiones anteriores, consulte Extensiones de aplicación que usan uap3.

Extensiones de paquete vs. app extensiones

Feature Extensiones de aplicación (uap3) Extensiones del paquete (uap17)
Sistema operativo mínimo Windows 10 1607 Windows 11
Ámbito Por aplicación Por paquete
Uso compartido de contenido Solo carpeta pública Acceso completo al contenido del paquete
Espacio de nombres del manifiesto uap3:AppExtension uap17:PackageExtension

Declarar un host de extensión de paquete

Agregue una PackageExtensionHost declaración al manifiesto de la aplicación host:

<Package xmlns:uap17="http://schemas.microsoft.com/appx/manifest/uap/windows10/17" ...>
  <Applications>
    <Application ...>
      <Extensions>
        <uap17:Extension Category="windows.packageExtensionHost">
          <uap17:PackageExtensionHost>
            <uap17:Name>com.example.myplatform.extensions</uap17:Name>
          </uap17:PackageExtensionHost>
        </uap17:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Declaración de una extensión de paquete

En el manifiesto del paquete de extensión:

<Package xmlns:uap17="http://schemas.microsoft.com/appx/manifest/uap/windows10/17" ...>
  <Applications>
    <Application ...>
      <Extensions>
        <uap17:Extension Category="windows.packageExtension">
          <uap17:PackageExtension Name="com.example.myplatform.extensions"
                                   Id="MyExtension"
                                   DisplayName="My Extension"
                                   Description="Adds features to the platform">
            <uap17:Properties>
              <ExtensionType>content</ExtensionType>
              <Version>1.0</Version>
            </uap17:Properties>
          </uap17:PackageExtension>
        </uap17:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Descubrir extensiones de paquetes

Use la misma API AppExtensionCatalog para detectar extensiones de paquete en tiempo de ejecución. El nombre de host coincide con el Name declarado en el manifiesto:

var catalog = AppExtensionCatalog.Open("com.example.myplatform.extensions");
var extensions = await catalog.FindAllAsync();

foreach (var ext in extensions)
{
    System.Diagnostics.Debug.WriteLine(
        $"Found extension: {ext.DisplayName} ({ext.Id})");

    // Read custom properties
    var properties = await ext.GetExtensionPropertiesAsync();
    // Access properties as needed
}

Prácticas recomendadas

  • Use una convención de nomenclatura de dominio inverso para los nombres de extensión (por ejemplo, com.company.app.extensions).
  • Versione el protocolo de extensión para que las aplicaciones host puedan controlar los formatos de extensión antiguos y nuevos.
  • Valide el contenido de la extensión antes de usarlo: las extensiones proceden de otros paquetes y no deben confiar ciegamente.