Help us understand the problem. What is going on with this article?

.NET Core 3.0のPublish Single File概要

.NET Core 3.0のPublish Single File概要

by Nuits
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


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした