Pakketextensies maken voor Windows App SDK-apps

Pakketextensies breiden het app-extensiemodel uit door het delen van bredere inhoud tussen pakketten mogelijk te maken. Een pakketextensiehost kan extensies van elk pakket accepteren, waardoor deze geschikt is voor uitbreidbaarheidsscenario's op platformniveau.

Note

Voor pakketextensies is Windows 11 vereist en wordt de uap17 naamruimte gebruikt. Zie voor een aanpak die compatibel is met eerdere versies App-extensies, die gebruikmaken van uap3.

Pakketuitbreidingen versus appextensies

Feature App-extensies (uap3) Pakketuitbreidingen (uap17)
Minimaal besturingssysteem Windows 10 1607 Windows 11
Scope Per app Per pakket
Inhoud delen Alleen openbare mappen Volledige toegang tot inhoudspakketten
Naamruimte van het manifest uap3:AppExtension uap17:PackageExtension

Een pakketextensiehost declareren

Voeg een PackageExtensionHost declaratie toe aan het manifest van de host-app:

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

Een pakketextensie declareren

In het manifest van het extensiepakket:

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

Pakketextensies detecteren

Gebruik dezelfde AppExtensionCatalog-API om pakketextensies tijdens runtime te detecteren. De hostnaam komt overeen met de Name gedeclareerde naam in het 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
}

Aanbevolen procedures

  • Gebruik een reverse-domainnaamconventie voor namen van extensies (bijvoorbeeld com.company.app.extensions).
  • Versie van uw extensieprotocol zodat host-apps oude en nieuwe extensie-indelingen kunnen verwerken.
  • Valideer extensie-inhoud voordat u deze gebruikt. Extensies zijn afkomstig van andere pakketten en mogen niet blind vertrouwd worden.