🐳

単体動作するWPFアプリを.NETで作るとファイルサイズがデカくなる

2024/10/31に公開

.NET Framework時代の5MBにも満たないWPFアプリを.NET 8.0にしたら100MB以上になることがわかって困った話

環境

  • 2024年10月
  • Windows 11 23H2
  • Visual Studio Community 2022
  • .NET 8.0

.NETのランタイムはWindowsに含まれていない

.NET FrameworkのランタイムはWindowにデフォルトで含まれています[1]が、.NETは含まれていません
アプリケーション実行時にランタイムがないとインストールを促してくれますが、そもそも実行ファイルのみで動作してほしい場合もあるかと思います

そんなときに.NETではアプリケーション自身にランタイムを含める自己完結型の発行が選べます
もちろんファイルサイズがデカくなります!それはそう!
試したところ空のWPFアプリでも100MB超えました

そこでランタイムでも不要な部分は含めないトリミング機能が存在します
・・・のですが、WPFは現状非対応です
https://github.com/dotnet/wpf/issues/3811

なのでいまのところWPFの自己完結型アプリは自動的に100MBオーバーのサイズになってしまうようです

ほかの選択肢

WinUI 3

マイクロソフトの次の主力UIフレームワークっぽいWinUI 3に乗り換える
軽く試したのですが自分の環境だと上記、自己完結型+トリミングでエラーが出てしまい上手くパブリッシュできませんでした
また機能的にも不足している部分がありそうなので、もうちょっと枯れてからのほうがいいかなーという印象を持ちました
https://zenn.dev/shinta0806/articles/wpf-vs-winui3

Avalonia

  • ほどよく枯れている
  • WPFと似ている
  • トリミング対応

と、ちょうどいま痒いところに手が届いてる感じのUIフレームワーク
WPF、WinUI 3のような公式印がなくてもよければよさそうな選択肢です
https://zenn.dev/inuinu/articles/avalonia-ui-for-absolute-beginners

脚注
  1. https://learn.microsoft.com/ja-jp/dotnet/framework/migration-guide/versions-and-dependencies ↩︎

Discussion