MSIX パッケージの種類

MSIX では、Main、Framework、Resource、Optional の 4 種類のパッケージがサポートされています。 MSIX では、1 つ以上の MSIX パッケージの配布コンテナーであるバンドル パッケージもサポートされています。

パッケージの種類は、デプロイ、依存関係、実行、保守に関する動作の組み合わせを定義するものです。 一部の動作は型に固有ですが、マニフェスト宣言は他の既定値をオーバーライドできます。

タイプ 主な目的 マニフェストまたは識別インジケーター
メイン アプリケーションのプライマリ パッケージ 別のパッケージ タイプの宣言がありません
フレームワーク 共有ライブラリ、コンポーネント、またはランタイム コンテンツ <Framework>true</Framework>
資源 言語、スケール、または修飾子固有のリソース <ResourcePackage>true</ResourcePackage>
オプション 1 つのメイン パッケージに関連付けられている追加のコンテンツ <uap3:MainPackageDependency>
バンドル 複数の MSIX パッケージの配布コンテナー マニフェストと、ResourceId の値が ~ であるもの

メイン パッケージ

メイン パッケージは、アプリケーションのプライマリ パッケージを表します。 アプリケーション、機能、依存関係、拡張機能、アウトプロセス サーバーを宣言できます。

マニフェストには、明示的なメイン パッケージ マーカーは含まれません。 パッケージは、それ自体が別のパッケージの種類として宣言されていない場合、メイン パッケージです。

フレームワーク パッケージ

フレームワーク パッケージは、共有ライブラリ、コンポーネント、リソース、またはその他のランタイム コンテンツを提供します。 他のパッケージまたはプロセスは、コンテンツを読み込む前に、フレームワーク パッケージをパッケージ グラフに追加します。

フレームワーク パッケージではサイド バイ サイド バージョンがサポートされているため、アプリケーションは新しいバージョンに個別に移行できます。 パッケージでは、Framework マニフェスト要素を trueに設定して、この型を宣言します。

パッケージ化されたプロセスとパッケージ化されていないプロセスからのフレームワーク パッケージの使用については、「 動的依存関係 API の使用」を参照してください。

リソース パッケージ

リソース パッケージは、言語、表示スケール、またはその他の修飾子に固有のリソースを、メイン パッケージやオプション パッケージから分離するものです。 Windowsは、デバイスまたはユーザーに適用されるリソース パッケージのみをインストールします。

リソース パッケージでは、既定では実行が許可されません。 パッケージは、この既定値を uap6:AllowExecution でオーバーライドできます。 パッケージは、true を に設定して、リソースの種類を宣言します。

省略可能なパッケージ

オプション パッケージには、特定のメイン パッケージの追加コンテンツが含まれています。 たとえば、アプリケーションでは、ダウンロード可能なマップ、高解像度アセット、またはオプションのツールを別々のパッケージに配置できます。

フレームワーク パッケージとは異なり、オプション パッケージは 1 つのメイン パッケージ ファミリに関連付けられます。 uap3:MainPackageDependency を使用してそのリレーションシップを宣言します。

作成と関連セットの要件については、「オプション パッケージと関連セットの作成」を参照してください。

バンドル パッケージ

MSIX バンドル (.msixbundle) には、1 つ以上の MSIX パッケージが含まれています。 バンドルには 1 つの配布アーティファクトが含まれており、Windows がターゲット デバイスに該当するアーキテクチャおよびリソース パッケージのみをインストールできるようにします。

バンドル内のすべてのパッケージは、同じパッケージ ファミリに属します。 バンドルは、5 番目の展開可能なパッケージの種類ではなく、コンテナーです。

コードでパッケージの種類を識別する

Windows.ApplicationModel.Package クラスは、パッケージの種類を識別するプロパティを公開します。

static string GetPackageType(Windows.ApplicationModel.Package package)
{
    if (package.IsBundle)
    {
        return "Bundle";
    }

    if (package.IsFramework)
    {
        return "Framework";
    }

    if (package.IsResourcePackage)
    {
        return "Resource";
    }

    if (package.IsOptional)
    {
        return "Optional";
    }

    return "Main";
}

PowerShell を使用してパッケージの種類を識別する

既定では、 Get-AppxPackage は Main パッケージと Framework パッケージを返します。 他の種類を含めるには、-PackageTypeFilterを使用します。

Get-AppxPackage -PackageTypeFilter Main,Framework,Resource,Optional,Bundle |
    Select-Object Name, PackageFullName, IsFramework, IsResourcePackage, IsBundle

出力オブジェクトには IsOptional プロパティは公開されていません。 フィルターを使用して「オプションのパッケージ」を含め、それらを区別する必要がある場合は、そのマニフェストやパッケージ間の関連性を確認してください。