為 Windows 應用程式 SDK 應用程式建立套件擴充

套件擴充功能透過允許套件間更廣泛的內容分享來擴展應用程式擴充套件模型。 套件擴充主機可接受任何套件的擴充,適合平台層級的擴充性場景。

Note

套件擴充功能需要 Windows 11,並使用 uap17 命名空間。 如需可相容於較早版本的方法,請參閱使用 uap3應用程式擴充功能

套件擴充功能vs. app擴充功能

Feature 應用程式擴充功能 (uap3 套件擴充功能 (uap17
最低作業系統 Windows 10 1607 Windows 11
Scope 依應用程式分類 每套件
內容共用 僅限公共資料夾 完整套件內容存取權
manifest 命名空間 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)。
  • 調整你的擴充套件協定,讓主機應用程式能同時支援舊有和新的擴充格式。
  • 使用前請驗證擴充內容——擴充功能來自其他套件,不應盲目信任。