2024/01/22 追記
FDDは未知の原因不明なエラーが発生する場合があります。
何か特別な理由が無い限りはSCDを推奨します。
Ⅰ. はじめに
タイトルの通り「.NET Coreで実行ファイル1つだけを出力する方法」です。
FDDはFramework-dependent deploymentsの事です。
SCDはSelf-contained deploymentsの事です。
Ⅱ. 環境
- .NET Core 3.0以上必須
※.NET 5以上についてはこの記事で触れません
Ⅲ. やり方1(csprojを変更しない場合)
FDDの場合
dotnet publish -c Release -r win-x64 --self-contained false /p:PublishSingleFile=true
SCDの場合
dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true
Ⅳ. やり方2(csprojを変更する場合)
FDDの場合
1. csprojを変更する
<PropertyGroup> <PublishSingleFile>true</PublishSingleFile> </PropertyGroup>
2. ビルドする
dotnet publish -c Release -r win-x64 --self-contained false
SCDの場合
1. csprojを変更する
<PropertyGroup> <PublishSingleFile>true</PublishSingleFile> </PropertyGroup>
2. ビルドする
dotnet publish -c Release -r win-x64 --self-contained true
その他
Q. ファイルサイズを小さくしたい
A. PublishTrimmed オプションを付けると不要なDLLを除くことが出来ます。
つまり、ファイルサイズが小さくなります。
※SCDでのみ有効です。※2019/07/05時点
※.NET Core 3.0 preview 6以上必須
dotnet publish -r <rid> /p:PublishTrimmed=true /p:PublishSingleFile=true
Q. 起動速度を高速化したい
A. PublishReadyToRun オプションを付けると「起動速度だけ」高速化出来ます。
PublishTrimmedと併用可能です。
※SCDでのみ有効です。※2019/07/05時点
※.NET Core 3.0 preview 6以上必須
dotnet publish -r <rid> /p:PublishTrimmed=true /p:PublishReadyToRun=true /p:PublishSingleFile=true
参考
- https://github.com/dotnet/designs/blob/master/accepted/single-file/design.md#build-system-interface
- Publish apps with the .NET CLI - .NET | Microsoft Learn
- Support single-file distribution · Issue #11201 · dotnet/runtime · GitHub
- Reduce size of PublishSingleFile binary · Issue #12629 · dotnet/runtime · GitHub
- Announcing .NET Core 3.0 Preview 6 - .NET Blog
- Customizing Trimming in .NET 5 - .NET Blog