単一プロジェクト MSIX を使用してアプリをパッケージ化する

単一プロジェクト MSIX は、個別のパッケージ プロジェクトを必要とせずに、パッケージ WinUI 3 デスクトップ アプリを構築できるようにする機能です。 WinUI 3 アプリは、ユーザー インターフェイス (UI) に Windows UI ライブラリ (WinUI) 3 フレームワークを使用し、Windows アプリ SDK を使用するアプリです。 WinUI 3 アプリではないデスクトップ アプリをパッケージ化するには、「Visual Studio で MSIX パッケージ用のデスクトップ アプリケーションを設定する」を参照してください。

単一プロジェクト MSIX 機能は、次のシナリオで使用できる Visual Studio 拡張機能として使用できます。

  • Windows アプリ SDK に付属する空のアプリ パッケージ (デスクトップの WinUI 3) Visual Studio プロジェクト テンプレートを使用して、新しい WinUI 3 デスクトップ アプリを作成します。 このプロジェクトは、別のパッケージ化プロジェクトを必要とせずに、アプリを MSIX パッケージにビルドするように構成されています。
  • 別のパッケージ 化プロジェクトを使用する既存の WinUI 3 デスクトップ アプリを変更します。 この変更には、次の図に示すように、個別のパッケージ 化プロジェクトを削除する必要があります。

Comparing packaging project to single project

概要

このセクションでは、単一プロジェクト MSIX 機能に関する重要な詳細について説明します。

メリット

単一プロジェクトの MSIX 機能を導入する前に、パッケージ化された WinUI 3 デスクトップ アプリをビルドする場合は、ソリューションに 2 つのプロジェクト (アプリ プロジェクト) と追加の Windows アプリケーション パッケージ プロジェクトが必要でした (「Visual Studio で MSIX パッケージ化用のデスクトップ アプリケーションを設定する」を参照します)。 単一プロジェクト MSIX 機能を使用すると、アプリのプロジェクトのみを使用してアプリを開発およびビルドできます。 それにより、プロジェクト構造がより明確になり、開発作業がより簡単になります。 たとえば、スタートアップ プロジェクトとして別のパッケージ プロジェクトを選択する必要がなくなりました。

サポートされているプロジェクトの種類

単一プロジェクトの MSIX 機能は、Windows アプリ SDK の Visual Studio (C# および C++) で WinUI 3 テンプレートをサポートしています。

制限事項

単一プロジェクト MSIX では、生成される MSIX パッケージ内で 1 つの実行可能ファイルのみをサポートします。 複数の実行可能ファイルを単一 MSIX パッケージに結合する必要がある場合は、ソリューションで Windows アプリケーション パッケージ プロジェクトを引き続き使用する必要があります。

単一プロジェクトの MSIX パッケージ作成ツールをインストールする

単一プロジェクトの MSIX パッケージ ツールには、新しいパッケージ WinUI 3 デスクトップ アプリの作成に使用できる Visual Studio プロジェクト テンプレートが含まれています。 これらのツールは、Visual Studio の Windows アプリ SDK 拡張機能に含まれています。 Windows アプリ SDKのインストール手順については、「Windows アプリ SDKのインストール ツール」を参照してください。

Windows アプリ SDK 0.8 および C# バージョンの 1.0 Preview 3: 単一プロジェクトの MSIX パッケージ 化ツールは、Windows アプリ SDK バージョン 0.8 用の Visual Studio 用のWindows アプリ SDK拡張機能や、Windows アプリ SDK 1.0 のプレビュー 3 までの C# プロジェクトには含まれません。 そのため、これらのバージョンを使用している場合は、単一プロジェクトの MSIX パッケージ ツールを明示的にインストールすることが必要になる場合があります。 以下の情報を参照してください。

その後、Visual Studio で、拡張機能がインストールされていることを確認できるようになります。 [拡張]>[拡張の管理]>[インストール済み]>[すべて] をクリックし、単一プロジェクトの MSIX パッケージ ツールが一覧表示されていることを確認します。

新しいプロジェクトの作成

Windows アプリ SDK 1.0 プレビュー 2 以降を使用している場合は、[空のアプリ、パッケージ (デスクトップの WinUI 3)] テンプレートを使用することにより、単一アプリ MSIX サポートを含む新しい WinUI 3 ベースのプロジェクトを簡単に作成できます。 詳しくは、「WinUI 3 プロジェクトを初めて作成する」をご覧ください。

既存のプロジェクトを変更する

別のパッケージ プロジェクトを使用する既存の WinUI 3 ベースアプリを変更するには、このセクションの手順に従います。 この手順には、パッケージ マニフェスト (および MSIX パッケージの構築に必要なその他のサポート) をアプリケーション プロジェクトに移動し、別のパッケージ化プロジェクトを削除することが含まれます。

手順 1: 既存のパッケージ プロジェクトを作成するか開く

Windows アプリケーション パッケージ プロジェクトを含む WinUI 3 デスクトップ アプリ (「Visual Studio の WinUI 3 テンプレート」を参照) のソリューションが既にある場合 (「Visual Studio で MSIX パッケージ化用のデスクトップ アプリケーションを設定する」を参照)、Visual Studio でそのソリューションを今すぐ開きます。

そうでない場合は、Windows アプリケーション パッケージ プロジェクトでパッケージ化された空のアプリ (デスクトップの WinUI 3) テンプレートを使用して、Visual Studio で新しい WinUI 3 デスクトップ アプリを作成します。 ソリューションは以下のスクリーンショットのようになります。

A solution using the packaging project

手順 2: アプリケーション プロジェクト設定を編集する

次に、一部の構成設定を編集して、単一プロジェクト MSIX 機能を使用します。 プロジェクトの種類と Visual Studio バージョンに応じて異なる手順があります。

  1. ソリューション エクスプローラーで、アプリケーションのプロジェクト ノードをダブルクリックして、XML エディターで .csproj ファイルを開きます。 メインの <PropertyGroup> 要素に次の XML を追加します。

    <EnableMsixTooling>true</EnableMsixTooling>
    <PublishProfile>Properties\PublishProfiles\win10-$(Platform).pubxml</PublishProfile>
    

    これを完了すると、 <[PropertyGroup]> 要素は以下の例のようになります。

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
        ...
        <UseWinUI>true</UseWinUI>
        <EnableMsixTooling>true</EnableMsixTooling>
        <PublishProfile>Properties\PublishProfiles\win10-$(Platform).pubxml</PublishProfile>
      </PropertyGroup>
    
  2. 変更を保存して、.csproj ファイルを閉じます。

  3. Visual Studio のバージョンに応じて、次のいずれかの手順を実行します。

    Visual Studio 向け(2022 以降)

    1. ソリューション エクスプローラーで、アプリケーションに対応するプロジェクト ノードの下の Properties フォルダーを右クリックし、[追加]>[新しい項目…] を選択します。

    2. [テキスト ファイル] を選択し、新しいファイルに「launchSettings.json」という名前を付け、[追加] をクリックします。 新しいファイルがアプリケーション プロジェクトの Properties フォルダーにあることを確認します。

    3. 次の設定を新しいファイルにコピーします。 シナリオの必要に応じて値を自由に変更できます。 MyApp 値には任意の文字列を指定できます。アプリケーションの名前と一致する必要はありません。

      {
          "profiles": {
              "MyApp": {
                  "commandName": "MsixPackage",
                  "commandLineArgs": "", /* Command line arguments to pass to the app. */
                  "alwaysReinstallApp": false, /* Uninstall and then reinstall the app. All information about the app state is deleted. */
                  "remoteDebugEnabled": false, /* Indicates that the debugger should attach to a process on a remote machine. */
                  "allowLocalNetworkLoopbackProperty": true, /* Allow the app to make network calls to the device it is installed on. */
                  "authenticationMode": "Windows", /* The authentication scheme to use when connecting to the remote machine. */
                  "doNotLaunchApp": false, /* Do not launch the app, but debug my code when it starts. */
                  "remoteDebugMachine": "", /* The name of the remote machine. */
                  "nativeDebugging": false /* Enable debugging for managed and native code together, also known as mixed-mode debugging. */
              }
          }
      }
      
    4. launchSettings.json ファイルを保存して閉じます。

    Visual Studio 2019 の場合:

    1. ソリューション エクスプローラーで、アプリケーションに対応するプロジェクト ノードを右クリックし、[プロパティ] を選択します。

    2. [デバッグ] タブを選択し、Launch プロパティを MsixPackage に設定します。 最初の試行時に戻された場合は、これを 2 回選択する必要があります。

      Enabling MsixProject option

    3. 変更を保存します。

手順 3: アプリケーション プロジェクトにファイルを移動する

次に、いくつかの重要なファイルをアプリケーション プロジェクトに移動します。 プロジェクトの種類に応じて異なる手順があります。

  1. ファイル エクスプローラーで、Package.appxmanifest ファイルと Images フォルダーを、パッケージ プロジェクトからアプリケーション プロジェクトに移動します。 このファイルとフォルダーを、アプリケーション プロジェクトのフォルダー階層の最上位に配置します。
  2. Visual Studio のソリューション エクスプローラーで、Images フォルダー内のすべてのイメージを複数選択します。 [プロパティ] ウィンドウで、[ビルド アクション][コンテンツ] に設定します。
  3. パッケージ プロジェクトをソリューションから削除します。

Illustration of moving files to main app

手順 4: Configuration Manager での配置を有効にする

  1. [ビルド]>[構成マネージャー] を選択します。
  2. 構成マネージャーで、構成とプラットフォームの組み合わせごとに [配置] チェック ボックスをクリックします (たとえば、 [デバッグ][x86][デバッグ][arm64][リリース][x64] など)。

    Note

    [配置] チェックボックスと同じ行にある [構成][プラットフォーム] のドロップダウンではなく、上部にある [アクティブ ソリューション構成][アクティブ ソリューション プラットフォーム] のドロップダウンを必ず使用してください。

Enabling Deploy in Configuration Manager

手順 5: アプリを配置する

アプリケーション プロジェクトをビルドして配置します。 Visual Studio は、アプリケーションを MSIX パッケージにビルドし、パッケージをインストールして、アプリケーションを実行します。

手順 6: アプリを公開用にパッケージ化する

Visual Studio での [パッケージ化および公開] コマンドを使用して、アプリケーションをパッケージ化して、Microsoft Store に公開します。

単一プロジェクト MSIX アプリのビルドとパッケージ化を自動化する

msbuild を使用して、単一プロジェクト MSIX アプリをビルドしてパッケージ化できます。その結果、ワークフローを自動化できます。 単一プロジェクト ソリューションの手法とコマンド ラインは、2 プロジェクト ソリューション (Windows アプリケーション パッケージ プロジェクトを持つソリューション) がある場合に既に実行している手法とは少しだけ異なります (「Visual Studio での MSIX パッケージ化に対するデスクトップ アプリケーションのセットアップ」を参照してください)。

単一プロジェクト ソリューションの重要なビルド コマンド オプションは /p:GenerateAppxPackageOnBuild=true です。 このオプションを指定しない場合、プロジェクトはビルドされますが、MSIX パッケージは取得されません。 このオプションを含めます。これにより、MSIX パッケージが生成されます。

WinUI 3 単一プロジェクト ソリューションをビルドする GitHub アクションの形式の完全な例があります。

Note

単一プロジェクト MSIX では現在、MSIX バンドルの生成をサポートしていません (「MSIX パッケージのバンドル」を参照)。 単一の MSIX だけを生成します。 ただし、MSIX Bundler GitHub アクションを使用することで、.msix ファイルを MSIX バンドルにバンドルできます。

Windows 上でパッケージ化されたデスクトップ アプリが動作するしくみ

デスクトップ アプリケーションの Windows アプリ パッケージを作成したときのファイルとレジストリ エントリの動作の詳細については、「Windows でパッケージ化されたデスクトップ アプリが動作するしくみについて」を参照してください。

フィードバックを提供する

単一プロジェクト MSIX 機能について、フィードバックを送信したり、問題を報告したり、質問したりするには、Windows App SDK GitHub リポジトリでディスカッションまたは問題を投稿してください。