Criar extensões de pacotes para aplicações do SDK de Aplicações Windows

As extensões de pacotes expandem o modelo de extensão de aplicações ao permitir uma partilha mais ampla de conteúdos entre pacotes. Um host de extensões de pacotes pode aceitar extensões de qualquer pacote, tornando-o adequado para cenários de extensibilidade ao nível da plataforma.

Note

Extensões de pacotes requerem o Windows 11 e utilizam o uap17 namespace. Para uma abordagem compatível com versões anteriores, consulte as extensões de aplicação, que utilizam uap3.

Extensões de pacotes vs. extensões de aplicações

Feature Extensões de aplicação (uap3) Extensões de pacotes (uap17)
OS mínimo Windows 10 1607 Windows 11
Scope Por candidatura Por embalagem
Partilha de conteúdos Apenas pasta pública Acesso ao conteúdo completo do pacote
Espaço de nomes manifesto uap3:AppExtension uap17:PackageExtension

Declarar um host de extensão de pacote

Adicione uma PackageExtensionHost declaração ao manifesto da aplicação anfitriã:

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

Declarar uma extensão de pacote

No manifesto do pacote de extensão:

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

Descobre extensões de pacotes

Use a mesma API AppExtensionCatalog para descobrir extensões de pacotes em tempo de execução. O nome do anfitrião corresponde ao Name declarado no manifesto:

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
}

Melhores práticas

  • Use uma convenção de nomenclatura de domínio reverso para nomes de extensões (por exemplo, com.company.app.extensions).
  • Adapte o seu protocolo de extensão para que as aplicações anfitriãs possam lidar com formatos de extensão antigos e novos.
  • Valide o conteúdo das extensões antes de o usar — as extensões vêm de outros pacotes e não devem ser confiáveis cegamente.