使用應用程式擴充功能的自訂屬性

應用程式擴充功能屬性,是應用程式擴充功能開發人員在其應用程式資訊清單中,提供的自訂中繼資料欄位。 應用程式擴充功能主機可以在檢查應用程式擴充功能時,讀取此中繼資料,而不需要從應用程式擴充功能載入任何內容。

屬性是選用的,但卻是非常有用的功能。 建立應用程式擴充功能主機平台時,您可能需要廣泛的中繼資料,例如版本、功能、支援的檔案類型清單,或在載入應用程式擴充功能之前有助於了解的其他資料。 這類資訊甚至可能會決定您載入應用程式擴充功能的方式。 應用程式擴充功能屬性會提供開放式畫布,以任何最適用於應用程式的方式,確切地定義所需欄位,而不是嘗試預測您可能需要的所有欄位。

應用程式擴充功能屬性的優點

您為何應該利用應用程式擴充功能屬性,有兩個重要的原因:

  • 這是一種既輕鬆又安全的方法,可儲存有關應用程式擴充功能平台的基本或重要中繼資料,而不需要將該資訊放入檔案中。 您可以將其用於像是版本控制、權限和強制執行等重要概念。 例如,您的應用程式可能會堅持定義 version 欄位,並將其呈現在屬性中,而且根據該值具有不同的載入行為。

  • 因為資訊是儲存在應用程式資訊清單中,所以未來可以透過 API 為其建立索引並使其可供使用。 這表示,您可以將其突顯給使用者,或將應用程式擴充功能搜尋特定屬性的搜尋範圍更加縮小,而不需要先部署和載入擴充功能。

如何宣告屬性

屬性是在您套件的 Package.appxmanifest.xml 檔案中宣告。 擴充功能主機可在執行階段讀取其做為屬性集。 因為主機會定義平台,所以由主機負責與擴充功能開發人員溝通,以了解哪些屬性可供使用,而且應該放入 AppExtension 宣告中。

注意

Visual Studio 中的資訊清單設計工具不支援定義屬性的功能。 您必須直接編輯 Package.appxmanifest.xml 來定義屬性。

若要宣告屬性,請將其放在 <uap3:AppExtension> 宣告下的 <uap3:Properties/> 元素中。 以下是 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();
    }
}