Créer des extensions de package pour les applications SDK d'application Windows

Les extensions de package développent le modèle d’extension d’application en autorisant un partage de contenu plus large entre les packages. Un hôte d’extension de package peut accepter des extensions à partir de n’importe quel package, ce qui le rend adapté aux scénarios d’extensibilité au niveau de la plateforme.

Note

Les extensions de package nécessitent Windows 11 et utilisent l’espace uap17 de noms. Pour une approche compatible antérieure, consultez les extensions d’application qui utilisent uap3.

Extensions de paquet ou extensions d’application

Fonctionnalité Extensions d’application (uap3) Extensions de paquet (uap17)
Système d’exploitation minimal Windows 10 1607 Windows 11
Scope Par application Par paquet
Partage de contenu Dossier public uniquement Accès complet au contenu du package
Espace de noms du manifeste uap3:AppExtension uap17:PackageExtension

Déclarer un hôte d’extension de package

Ajoutez une PackageExtensionHost déclaration au manifeste de l’application hôte :

<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>

Déclarer une extension de package

Dans le manifeste du package d’extension :

<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>

Découvrir les extensions de package

Utilisez la même API AppExtensionCatalog pour découvrir les extensions de package au moment de l’exécution. Le nom d’hôte correspond à celui Name déclaré dans le manifeste :

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
}

Bonnes pratiques

  • Utilisez une convention d’affectation de noms de domaine inverse pour les noms d’extensions (par exemple, com.company.app.extensions).
  • Version de votre protocole d’extension afin que les applications hôtes puissent gérer les anciens et nouveaux formats d’extension.
  • Validez le contenu de l’extension avant de l’utiliser : les extensions proviennent d’autres packages et ne doivent pas être approuvées de manière aveugle.