2026/01/12(月) [n年前の日記]
#1 [visualstudio][csharp] Visual Studio 2022でビルドするファイルを圧縮
Windows11 x64 25H2 + VisualStudio 2022 Community で C# を使ってGUIアプリ(スクリーンセーバのラッパー)を作っているけれど、自己完結型にするとランタイムも同梱されるせいか、生成された .exe のファイルサイズが100MBを越えてしまう。大き過ぎる。少しは小さくしたい…。
生成されるファイルを圧縮することが可能らしい。
_C#でWindowsフォームアプリのexeにdllを組み込む - Qiita
.csproj の最後のほう、</Project> の前のあたりに以下を追加する。<Choose> - </Choose> を使うと条件を満たした時だけその設定が有効になるそうで、以下の場合は Release時とPublish(公開)時にのみ設定が反映される。らしい。
EnableCompressionInSingleFile を true にすることで圧縮がかかる。らしい。
他の指定の意味は以下。
メモリ上に展開したほうがたぶん速そうだけど、フォームを使っているアプリは動作しなくなったりする時もある、とAI君が言っている。
また、トリミングもすると更にファイルサイズを縮小できるらしいが、不要だと思われる部分を削除しながら処理するそうで、その結果、これまたフォームを使っているアプリなどは動かなくなる場合が多いらしい…。CLIアプリ等ならともかく、GUIアプリならやめておいたほうが良さそう…。
何にせよ、上記の指定で .exe は100MB以上あったのが 48MB ぐらいになってくれた。まだ大き過ぎる気もするけれど、100MB超えよりはマシだろう。
ただ、起動時に少し待たされるようになった。圧縮されているファイルを展開しているからだろうけど…。
生成されるファイルを圧縮することが可能らしい。
_C#でWindowsフォームアプリのexeにdllを組み込む - Qiita
.csproj の最後のほう、</Project> の前のあたりに以下を追加する。<Choose> - </Choose> を使うと条件を満たした時だけその設定が有効になるそうで、以下の場合は Release時とPublish(公開)時にのみ設定が反映される。らしい。
<Choose>
<When Condition="'$(PublishProtocol)' != '' or '$(Configuration)' == 'Release'">
<PropertyGroup>
<PublishSelfContained>true</PublishSelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishTrimmed>false</PublishTrimmed>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
</When>
</Choose>
</Project>
EnableCompressionInSingleFile を true にすることで圧縮がかかる。らしい。
他の指定の意味は以下。
- PublishSelfContained : 自己完結型にするかしないか。
- RuntimeIdentifier : プラットフォーム?の指定。
- PublishSingleFile : 1つの .exeファイルにする。
- IncludeAllContentForSelfExtract : 圧縮ファイルをストレージに展開するか、メモリ上に展開するか。
- PublishTrimmed : 不要部分をトリミングするか。
メモリ上に展開したほうがたぶん速そうだけど、フォームを使っているアプリは動作しなくなったりする時もある、とAI君が言っている。
また、トリミングもすると更にファイルサイズを縮小できるらしいが、不要だと思われる部分を削除しながら処理するそうで、その結果、これまたフォームを使っているアプリなどは動かなくなる場合が多いらしい…。CLIアプリ等ならともかく、GUIアプリならやめておいたほうが良さそう…。
何にせよ、上記の指定で .exe は100MB以上あったのが 48MB ぐらいになってくれた。まだ大き過ぎる気もするけれど、100MB超えよりはマシだろう。
ただ、起動時に少し待たされるようになった。圧縮されているファイルを展開しているからだろうけど…。
[ ツッコむ ]
以上です。