🦃

.NETアプリケーションのMSIXインストーラー作成時のエラー対応方法

に公開

MSIXというWindowsアプリケーションのインストーラーを作成する技術があります。.netプロジェクトの場合、シンプルなアプリケーションでも条件によってインストーラーの作成に失敗します。

問題

Windowsアプリケーションパッケージプロジェクトで.NETアプリケーションを公開しようとすると次のエラーが起きることがあります。

構築されているプロジェクトのプロセッサ アーキテクチャ "MSIL" と、参照 "C:\Users\led_l\source\repos\HelloWorld\HelloWorld\bin\x86\Debug\net9.0\win-x86\HelloWorld.dll" のプロセッサ アーキテクチャ "x86" の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。プロジェクトと参照の間でプロセッサ アーキテクチャが一致するように、構成マネージャーを使用してターゲットとするプロジェクトのプロセッサ アーキテクチャを変更するか、ターゲットとするプロジェクトのプロセッサ アーキテクチャに一致するプロセッサ アーキテクチャとの依存関係を参照で設定することを検討してください。

原因

プロジェクトファイルに<PlatformTarget>AnyCPU</PlatformTarget>が明示されていないためです。

.netアプリケーションのプロジェクトファイルは初期状態では次のように<PlatformTarget>AnyCPU</PlatformTarget>が含まれていません。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

ただし、プロジェクトのプロパティをみると[プラットフォームターゲット]は[Any CPU]に設定されています。

[プラットフォームターゲット]が空のとき、アプリケーションのプロジェクトは[Any CPU]と解釈します。Windowsアプリケーションパッケージプロジェクトは[x86]と解釈するようです。

解決策

プロジェクトファイルに<PlatformTarget>AnyCPU</PlatformTarget>を追加します。

次のように<PropertyGroup>に追加します。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PlatformTarget>AnyCPU</PlatformTarget>
  </PropertyGroup>

</Project>

明示されている場合は、プロパティ画面の[プラットフォームターゲット]の左に青いバーが表示されます。

次の手順でGUIからも設定できます。

  1. プロパティ画面をひらく
  2. [プラットフォームターゲット]の値を、一度[Any CPU]以外の値に設定する
  3. [プラットフォームターゲット]の値を、[Any CPU]に設定する

問題を再現する手順

アプリケーションの作成

.NETのコンソールアプリケーションプロジェクトを作成します。
.NET Frameworkのプロジェクトでは再現しないので注意してください。

フレームワークは.NET 9.0を選びました。
.NET 8.0でも再現できます。

テンプレートからHello, World!を出力するプログラムが追加されます。

このとき[ソリューションエクスプローラー]のプロジェクトをダブルクリックして、プロジェクトファイルを開いて見ましょう。
<PlatformTarget>AnyCPU</PlatformTarget>がないことが確認できます。

Windows アプリケーション パッケージ プロジェクトの作成

[ソリューションエクスプローラー]から[新しいプロジェクト]を[追加]します。

[Windows アプリケーション パッケージ プロジェクト]を作成します。

[ターゲットプラットフォーム]はデフォルトのままです。

[ソリューションエクスプローラー]から作成したWindows アプリケーション パッケージ プロジェクトの[依存関係]を右クリックして[プロジェクト参照の追加]をします。

アプリケーションプロジェクトが表示されるのでチェックを入れます。

パッケージの公開

[ソリューションエクスプローラー]からWindows アプリケーション パッケージ プロジェクトを右クリックし[公開] > [アプリパッケージの作成]を選択します。

デフォルトのままです。

デフォルトのままです。

[作成]をクリックします。

エラー発生

参考ページ

ラグザイア

Discussion