Creare estensioni di pacchetto per le app di SDK per app di Windows

Le estensioni del pacchetto espandono il modello di estensione dell'app consentendo una condivisione di contenuto più ampia tra i pacchetti. Un host di estensione del pacchetto può accettare estensioni da qualsiasi pacchetto, rendendolo adatto per scenari di estendibilità a livello di piattaforma.

Note

Le estensioni del pacchetto richiedono Windows 11 e usano lo spazio dei nomi uap17. Per un approccio compatibile con le versioni precedenti, vedere Estensioni dell'app che usano uap3.

Estensioni del pacchetto vs. estensioni dell'app

Feature Estensioni dell'app (uap3) Estensioni del pacchetto (uap17)
Sistema operativo minimo Windows 10 1607 Windows 11
Scope Per singola applicazione Per pacchetto
Condivisione di contenuti Solo cartella pubblica Accesso completo al contenuto del pacchetto
Spazio dei nomi manifesto uap3:AppExtension uap17:PackageExtension

Dichiarare un host di estensione del pacchetto

Aggiungi una dichiarazione PackageExtensionHost al manifest dell'app 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>

Dichiarare un'estensione del pacchetto

Nel manifesto del pacchetto di estensione:

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

Individuare le estensioni dei pacchetti

Usare la stessa API AppExtensionCatalog per individuare le estensioni del pacchetto in fase di esecuzione. Il nome host corrisponde a Name dichiarato nel manifest:

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
}

Procedure consigliate

  • Usare una convenzione di denominazione di dominio inverso per i nomi di estensione , ad esempio com.company.app.extensions.
  • Versione del protocollo di estensione in modo che le app host possano gestire formati di estensione precedenti e nuovi.
  • Convalidare il contenuto dell'estensione prima di usarlo: le estensioni provengono da altri pacchetti e non devono essere ciecamente attendibili.