Windows アプリ SDK アプリのパッケージ拡張機能を作成する

パッケージ拡張機能は、パッケージ間でのより広範なコンテンツ共有を可能にすることで、アプリ拡張機能モデルを拡張します。 パッケージ拡張機能ホストは、任意のパッケージの拡張機能を受け入れることができ、プラットフォーム レベルの拡張シナリオに適しています。

Note

パッケージ拡張機能にはWindows 11が必要であり、uap17名前空間を使用します。 以前の互換性のある方法については、「を使用するuap3」を参照してください。

パッケージ拡張機能vs. app拡張機能

特徴 アプリ拡張機能 (uap3) パッケージ拡張機能 (uap17)
最小 OS Windows 10 1607 ウィンドウズ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)。
  • ホスト アプリが古い拡張形式と新しい拡張形式を処理できるように、拡張機能プロトコルをバージョン管理します。
  • 拡張機能のコンテンツを使用する前に検証します。拡張機能は他のパッケージから取得され、盲目的に信頼されるべきではありません。