Erstellen von Paketerweiterungen für Windows App SDK-Apps

Paketerweiterungen erweitern das App-Erweiterungsmodell, indem sie einen umfassenderen Austausch von Inhalten zwischen Paketen ermöglichen. Ein Paketerweiterungshost kann Erweiterungen von jedem Paket akzeptieren, sodass er für Erweiterungsszenarien auf Plattformebene geeignet ist.

Note

Paketerweiterungen erfordern Windows 11 und verwenden den uap17 Namespace. Einen abwärtskompatiblen Ansatz finden Sie unter App-Erweiterungen, die uap3 verwenden.

Paketerweiterungen vs. app Erweiterungen

Funktion App-Erweiterungen (uap3) Paketerweiterungen (uap17)
Mindestbetriebssystem Windows 10 1607 Windows 11
Geltungsbereich Pro Anwendung Pro Paket
Teilen von Inhalten Öffentlicher Ordner nur Vollständiger Paketinhaltszugriff
Manifestnamespace uap3:AppExtension uap17:PackageExtension

Deklarieren eines Paketerweiterungshosts

Fügen Sie dem Manifest der Host-App eine PackageExtensionHost Deklaration hinzu:

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

Deklarieren einer Paketerweiterung

Im Manifest des Erweiterungspakets:

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

Entdecken von Paketerweiterungen

Verwenden Sie dieselbe AppExtensionCatalog-API , um Paketerweiterungen zur Laufzeit zu ermitteln. Der Hostname stimmt mit dem Name deklarierten im Manifest überein:

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
}

Bewährte Vorgehensweisen

  • Verwenden Sie für Erweiterungsnamen eine Benennungskonvention nach dem umgekehrten Domänennamenschema (z. B. com.company.app.extensions).
  • Version Ihres Erweiterungsprotokolls, damit Host-Apps alte und neue Erweiterungsformate verarbeiten können.
  • Überprüfen Sie Erweiterungsinhalte, bevor Sie sie verwenden – Erweiterungen stammen aus anderen Paketen und sollten nicht blind vertrauenswürdig sein.