对应用扩展使用自定义属性

应用扩展属性是应用扩展开发人员在其应用清单中提供的自定义元数据字段。 应用扩展主机可以在检查应用扩展时读取此元数据,而无需从应用扩展加载任何内容。

属性是可选的,但非常有用的功能。 创建应用扩展主机平台(例如版本、功能、支持的文件类型列表或其他数据)时,可能需要多种可能的元数据,这些元数据在加载应用扩展之前非常有用。 此信息甚至可能决定如何加载应用扩展。 相较于尝试预测你可能需要的所有字段,应用扩展属性为你提供了一块开放的画布,你可以以最适合自己应用的方式来定义所需的内容。

应用扩展属性的优点

应利用应用扩展属性的两个重要原因:

  • 这是一种简单且安全的方法来存储有关应用扩展平台的基本或重要元数据,而无需将该信息放入文件中。 可以将它用于版本控制、权限和强制等重要概念。 例如,你的应用可以要求在 version 属性中必须定义并存在一个字段,并且根据这个值进行不同的加载行为。

  • 由于信息存储在应用清单中,因此以后可以通过 API 对其进行索引和提供。 这意味着,可以气泡的形式将它显示给用户,或者对特定的属性运行更细化的应用扩展搜索,而无需先部署并加载扩展。

如何声明属性

属性在包的 Package.appxmanifest 文件中声明。 扩展主机可以在运行时读取它们作为属性集。 由于主机定义了平台,因此由主机向扩展开发人员传达哪些属性可用且应放入 AppExtension 声明中。

注释

Visual Studio 中的清单设计器不支持定义属性的功能。 必须直接编辑 Package.appxmanifest 才能定义属性。

若要声明属性,请将它们放在 <uap3:Properties/> 元素中,在您的 <uap3:AppExtension> 声明下。 以下是一个 Microsoft Edge 示例 <uap3:AppExtension> 声明,使用了 Edge 所支持的属性。

<uap3:AppExtension Name="com.microsoft.edge.extension" Id="FirstExtension" PublicFolder="Extension" DisplayName="MyExtension">
  <uap3:Properties>
    <Capabilities>
      <Capability Name="websiteContent" />
      <Capability Name="websiteInfo" />
      <Capability Name="browserWebRequest" />
      <Capability Name="browserStorage" />
    </Capabilities>
  </uap3:Properties>
</uap3:AppExtension>

Edge 已使用声明的扩展功能列表定义了 Capabilities 的已知属性值。 作为主机,你可以支持应用扩展中所需的任何属性。 由于这些属性集是一个属性集,因此也可以具有嵌套属性。 最好拥有根版本属性,以便在将来更改扩展的格式时使用该属性。 我们故意没有将 Version 作为应用扩展的属性,这样你就不受制于使用我们的版本控制语义。 相反,我们创建了多个属性,其中版本可以是许多自定义属性之一,可以按您所需的任何方式和格式定义和处理。

如何使用属性

假设应用扩展中有一个简单的属性,用于描述版本,如下所示。

<uap3:Properties>
    <Version>1.0.0.0</Version>
</uap3:Properties>

若要在运行时获取此数据,只需在应用扩展上调用 GetExtensionPropertiesAsync()。

string extensionVersion = "Unknown";
var properties = await ext.GetExtensionPropertiesAsync() as PropertySet;
if (properties != null)
{
    if (properties.ContainsKey("Version"))
    {
        PropertySet versionProperty = properties["Version"] as PropertySet;
        extensionVersion = versionProperty["#text"].ToString();
    }
}