1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WinUI 3 を NativeAOT で発行する

1
Last updated at Posted at 2026-08-03

はじめに

アプリの起動が速くなると話題の NativeAOT を試してみました。

設定項目は少ないのですが、うまくいかないと意外と悩みます。私も .csproj を手動で編集してようやく動作させることができました。

同じところでハマる人もいるかもしれないので、手順をまとめておきます。

1. .csproj を編集する

WinUI3プロジェクトの .csproj に以下の設定を追加します。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <WindowsPackageType>None</WindowsPackageType>
    <PublishAot>True</PublishAot>
  </PropertyGroup>
       ...

設定項目の意味は以下のとおりです。

設定 説明
WindowsPackageType None を指定すると、EXE をダブルクリックして起動できる Unpackaged アプリになります。
PublishAot True を指定すると、発行時に NativeAOT が適用されます。

2. ビルド構成を選択する

ビルド構成は以下のように設定します。

スクリーンショット 2026-08-03 230659.png

3. 発行する

アプリのプロジェクトを右クリックし、発行 を選択します。

スクリーンショット 2026-08-03 231008.png

発行プロファイルとして win-x64.pubxml を選び、発行 をクリックします。

スクリーンショット 2026-08-03 231346.png

NativeAOT が有効になっている場合、発行時の出力に以下のメッセージが表示されます。

2>Generating native code

通常の発行とは異なり、ネイティブコードの生成処理が行われていることが確認できます。

4. 実行する

発行が完了すると、以下のフォルダーに NativeAOT 化された EXE が出力されます。

bin\Release\net8.0-windows10.0.19041.0\win-x64\publish

生成された EXE は、そのままダブルクリックで実行できます。


起動速度を比較してみる

通常の Release ビルドでは、次のフォルダーに EXE が出力されます。

bin\x64\Release\net8.0-windows10.0.19041.0\win-x64

一方、NativeAOT で発行した EXE は次のフォルダーに出力されます。

bin\Release\net8.0-windows10.0.19041.0\win-x64\publish

実際に同じアプリを起動して比較すると、違いは一目瞭然です。

通常の Release NativeAOT
ふつう.gif NativeAOT.gif

どちらも同じアプリですが、NativeAOT 版はダブルクリック後すぐにウィンドウが表示されます。
体感でも分かるくらい起動が速くなるので、一度試してみる価値はあります。

「えっ?あまり変わらない?」と思うかもしれません。
ただし、この比較は何度もアプリを起動した後の状態です。
通常の .NET アプリも一度起動すると、JIT コンパイルなどの影響で起動が速くなっています。
初回起動では、NativeAOT 版との差はもう少し分かりやすくなります

今回のサンプルは小さいプロジェクトなので差は控えめですが、アプリの規模が大きくなるほど NativeAOT の効果は感じやすくなるのかなと思います。

ちなみに、GIF作成が不器用ですいません(笑)
比較する場合はページをリロードした直後の1回目の表示をご確認ください。

おわりに

NativeAOT は起動速度や配布のしやすさなど多くのメリットがありますが、まだすべてのライブラリと相性が良いわけではありません。

リフレクションを多用するライブラリなどでは対応が必要になる場合もあるため、後から NativeAOT 化しようとすると、思った以上に修正が必要になることがあります。

そのため、最終的に NativeAOT で公開する予定があるのであれば、プロジェクトの初期段階から NativeAOT を有効にして開発を進めるのが良いかもしれません。

途中で問題が見つかっても早い段階で対応できるので、後からまとめて修正するよりも楽になるケースが多いと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?