包扩展通过允许包之间更广泛的内容共享来扩展应用扩展模型。 包扩展主机可以接受来自任何包的扩展,使其适用于平台级扩展性方案。
注释
包扩展需要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)。 - 对扩展协议进行版本控制,以便主机应用可以处理旧扩展格式和新扩展格式。
- 在使用扩展之前验证扩展内容 — 扩展来自其他包,不应盲目信任。