Win32 Desktop Bridge でアプリを Microsoft Store 配布用に MSIX パッケージ化した場合、デフォルトのままでは、x64 でパッケージ化しても、実際には 64 ビットなアプリにはなりません(Visual Studio 2022 17.0.4 現在)。

状況整理

Arch2パッケージプロジェクト(TestMsStoreWpf_Package)の[公開 → アプリパッケージの作成]で MSIX パッケージを作成する際、アーキテクチャを x64 にしただけでは、x64 なアプリは作成されません。

TaskManアプリを実行してタスクマネージャーを見てみると、「(32 ビット)」の表記はないので、一見すると 64 ビットアプリのように見えます。

しかし実際には、Environment.Is64BitProcess は false が返ってきますし(パッケージ化する前はちゃんと true が返ってきます)、4 GB 以上のメモリアロケートもできません。なんちゃって 64 ビットアプリになってしまっています。

解決方法

【注意】
本記事の解決方法は情報が古くなりました。
新しい解決方法については、こちらをご覧ください。
備忘として以下を残しておきます。

PlatformTarget本体プロジェクト(TestMsStoreWpf)のプロパティーで、Platform Target を Any CPU ではなく x64 に変更します。

しかしこうすると、本体プロジェクトはビルド・実行できるのですが、パッケージプロジェクトで MSIX パッケージを作成しようとすると、次のようなエラーになってしまいます。

資産ファイル '~\obj\wappublish\win-x64\project.assets.json' が見つかりません。

以降で、きちんとビルド・実行できるように対策していきます。

間違いを防止するために、いったん、本体プロジェクトの bin フォルダー・obj フォルダーを削除します。

Releasex64本体プロジェクトのプロパティーで Platform Target が x64 になっていることを確認したうえで、Release | x64 で本体プロジェクトをビルドします。

objobj フォルダーに project.assets.json を含む 5 つのファイルが作成されます。

obj フォルダーの中に wappublish フォルダーを作成し、さらにその中に win-x64 フォルダーを作成します。

作成した win-x64 の中に、project.assets.json を含む 5 つのファイルをコピーします(project.assets.json だけでもいいのかもしれませんが)。

Editコピーした win-x64 フォルダーの project.assets.json を編集します。

先頭付近にある targets セクションの、「"net6.0-windows10.0.19041": {}」の行末にカンマを追加し、その次の行として「"net6.0-windows10.0.19041/win-x64": {}」を追加します(ターゲット OS バージョンが 10.0.19041.0 の場合)。

  "targets": {
    "net6.0-windows10.0.19041": {},
    "net6.0-windows10.0.19041/win-x64": {}
  },

その後パッケージプロジェクトをビルドすると、真に 64 ビットの MSIX パッケージが作成されます。パッケージをインストールしても、Environment.Is64BitProcess が true になります。

なお、パッケージプロジェクトビルドの際に「アプリケーション マニフェストが無効なため、アプリケーション パッケージを作成できませんでした。アプリケーション マニフェストのエラーを修正してください。」というエラーになる場合がありますが、構わず再度ビルドするとビルドできます。このエラーは、x64 かどうかに関わらず発生します。