LoginSignup
32
29

More than 3 years have passed since last update.

.NET Core 3.0のPublish Single File概要

Last updated at Posted at 2019-10-24
1 / 14

はじめに

本スライドは「C# Tokyo」ユーザーグループの下記のイベントの発表資料です。

.NET Core 3.0 リリース記念 C# Tokyo 2019/10


.NET Core 3.0の魅力

  • 単一実行可能ファイル
  • Side by Sideの復活
  • 快適な動作速度
  • WPF・WinFormsのサポート
  • 先進的な機能の数々

本日のお題

  • 単一実行可能ファイル
    • Runtimeの同梱・非同梱
    • AOTコンパイル

何がうれしいのか?

  • 配布品質の向上(配布ミス削減)
  • 配布先環境のRuntime非依存
    • Runtimeの混在が可能
    • Runtimeの逐次バージョンアップが容易に
  • AOTによる起動速度の向上

注意点

  • これがすべてじゃないのが注意点
  • でかい
  • 初回起動速度の低下(unzip処理が発生)
  • でかい
  • 実行パスが配置した場所と異なる
  • でかい

とはいえ...

  • サーバーサイドではメリットが勝ちそう?※
  • ランタイム非同梱ならクライアントでも?

導入背景によるので一概にはなんとも
※IISやWindows Serviceへの登録はまだ未確認


具体的なパラメーター

No. 項目 説明
1 /p:PublishSingleFile 単一ファイルの実行可能バイナリの作成
2 /p:PublishReadyToRun AOTコンパイル
3 /p:PublishTrimmed 不要コードの削除
4 Warp 同上(サードパーティ製)
5 --self-contained ランタイム同梱するか否か

Demo


Demo Script

mkdir Demo
cd Demo
dotnet new sln
mkdir ConsoleApp
cd ConsoleApp
dotnet new console
dotnet sln ..\Demo.sln add ConsoleApp.csproj
dotnet run

dotnet publish -c Release -r win10-x64
dotnet publish -c Release -r win10-x64 /p:PublishSingleFile=true
dotnet publish -c Release -r win10-x64 /p:PublishSingleFile=true /p:PublishReadyToRun=true
dotnet publish -c Release -r win10-x64 /p:PublishSingleFile=true /p:PublishReadyToRun=true /p:PublishTrimmed=true

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" ; Invoke-WebRequest https://github.com/dgiagio/warp/releases/download/v0.3.0/windows-x64.warp-packer.exe -OutFile warp-packer.exe

.\warp-packer --arch windows-x64 --input_dir bin\Release\netcoreapp3.0\win10-x64\publish --exec ConsoleApp.exe --output ConsoleApp.exe

dotnet publish -c Release -r win10-x64 /p:PublishSingleFile=true /p:PublishReadyToRun=true --self-contained=false

空コンソールアプリのファイルサイズ

No. 項目 Case1 Case2 Case2 Case3 Case4 Case5
1 /p:PublishSingleFile - TRUE TRUE TRUE TRUE TRUE
2 /p:PublishReadyToRun - - TRUE TRUE TRUE TRUE
3 /p:PublishTrimmed - - - TRUE TRUE -
4 Warp - - - - TRUE -
5 --self-contained - TRUE TRUE TRUE TRUE FALSE
サイズ 161[KB] 65.8 [MB] 65.8 [MB] 25.4 [MB] 12.0[MB] 162 [KB]

空WPFアプリのファイルサイズ

No. 項目 Case1 Case2 Case2 Case3 Case4 Case5
1 /p:PublishSingleFile - TRUE TRUE TRUE TRUE TRUE
2 /p:PublishReadyToRun TRUE TRUE TRUE TRUE
3 /p:PublishTrimmed TRUE TRUE -
4 Warp TRUE -
5 --self-contained TRUE TRUE TRUE TRUE FALSE
サイズ 164[KB] 149 [MB] 149 [MB] 134 [MB] 55.5[MB] 164 [KB]

.csprojにも書けます

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PublishTrimmed>true</PublishTrimmed>
    <PublishReadyToRun>true</PublishReadyToRun>
  </PropertyGroup>
</Project>

参考情報

公式ドキュメント
https://github.com/dotnet/designs/blob/master/accepted/single-file/design.md#user-experience

なぜか詳しいおっちゃんのサイト
https://www.hanselman.com/blog/MakingATinyNETCore30EntirelySelfcontainedSingleExecutable.aspx


32
29
1

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
32
29