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

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

屬性是選擇性但非常實用的功能。 在您建立應用程式延伸模組主機平臺時,您可能需要使用各種可能的中繼資料,例如版本、功能、支援的檔案類型清單,或在載入應用程式延伸模組之前有助於瞭解的其他資料。 這類資訊甚至可能會決定您載入應用程式延伸模組的方式。 應用程式延伸模組屬性會提供開啟的畫布,以明確地定義您所需的內容,但最適合您的應用程式,而不是嘗試預測您可能需要的所有欄位。

應用程式延伸模組屬性的優點

有兩個重要的原因是您應該利用應用程式延伸模組屬性:

  • 這是儲存應用程式延伸模組平臺基本或重要中繼資料的簡單方法,不需要將資訊放入檔案中。 您可以使用它來處理重要概念,例如版本控制、許可權和強制執行。 例如,您的應用程式可能會堅持 version 欄位已定義且出現在屬性中,並根據該值載入不同的載入行為。

  • 由於資訊會儲存在應用程式資訊清單中,因此可以透過 API 進行編制索引,並在日後透過 API 提供使用。 這表示您可以將其反升以顯示給使用者,或更精簡的應用程式延伸模組搜尋特定屬性,而不需要先部署和載入擴充功能。

如何宣告屬性

屬性是在套件的 package.appxmanifest 檔案中宣告的。 擴充功能主機可以在執行時間讀取它們作為屬性集。 因為主機會定義平臺,所以主機會由主應用程式與延伸模組開發人員通訊,以瞭解有哪些屬性可供使用,而且應該放入宣告中 AppExtension

注意

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

若要宣告屬性,請將它們放在宣告 <uap3:Properties/> 下的元素中 <uap3:AppExtension> 。 以下是 <uap3:AppExtension> 使用 Edge 所支援屬性之 Microsoft 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();
    }
}