Criar extensões de pacote para aplicativos SDK do Aplicativo Windows

As extensões de pacote expandem o modelo de extensão do aplicativo permitindo um compartilhamento de conteúdo mais amplo entre pacotes. Um host de extensão de pacote pode aceitar extensões de qualquer pacote, tornando-o adequado para cenários de extensibilidade no nível da plataforma.

Note

As extensões de pacote exigem Windows 11 e usam o uap17 namespace. Para uma abordagem compatível com versões anteriores, consulte Extensões de app, que usam uap3.

Extensões de pacote vs. extensões de aplicativo

Característica Extensões de aplicativo (uap3) Extensões de pacote (uap17)
SO mínimo Windows 10 1607 Windows 11
Scope Por aplicativo Por pacote
Compartilhamento de conteúdo Somente pasta pública Acesso completo ao conteúdo do pacote
Espaço de nomes do manifesto uap3:AppExtension uap17:PackageExtension

Declarar um host de extensão do pacote

Adicione uma PackageExtensionHost declaração ao manifesto do aplicativo 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>

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>

Conheça extensões de pacotes

Use a mesma API AppExtensionCatalog para descobrir extensões de pacote em runtime. O nome do host 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
}

Práticas recomendadas

  • Use uma convenção de nomenclatura de domínio reverso para nomes de extensão (por exemplo, com.company.app.extensions).
  • Versão do protocolo de extensão para que os aplicativos host possam lidar com formatos de extensão antigos e novos.
  • Valide o conteúdo da extensão antes de usá-lo – as extensões vêm de outros pacotes e não devem ser cegamente confiáveis.