为Windows 应用 SDK应用创建包扩展

包扩展通过允许包之间更广泛的内容共享来扩展应用扩展模型。 包扩展主机可以接受来自任何包的扩展,使其适用于平台级扩展性方案。

注释

包扩展需要Windows 11并使用uap17命名空间。 有关兼容早期版本的方法,请参阅使用 uap3应用扩展

包扩展与应用扩展

功能 应用扩展 (uap3 包扩展(uap17
最低操作系统 Windows 10 1607 Windows 11
Scope 按应用程序分别 按包
内容共享 仅限公共文件夹 完整套餐内容访问权限
清单命名空间 uap3:AppExtension uap17:PackageExtension

声明包扩展宿主

PackageExtensionHost 声明添加到主机应用的清单:

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

声明包扩展

在扩展包的清单中:

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

探索软件包扩展

使用相同的 AppExtensionCatalog API 在运行时发现包扩展。 主机名与清单中声明的 Name 主机名匹配:

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
}

最佳做法

  • 对扩展名称使用反向域命名约定(例如, com.company.app.extensions)。
  • 对扩展协议进行版本控制,以便主机应用可以处理旧扩展格式和新扩展格式。
  • 在使用扩展之前验证扩展内容 — 扩展来自其他包,不应盲目信任。