3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

.Net Coreのコントロールアプリを自己完結型で発行する際に参考にした情報

Last updated at Posted at 2021-03-11

はじめに

dotNet Coreで作成したコントロールアプリを他のPCでも動くようにしたく、自己完結型でどうやって発行するのか参考にした記事のメモです。

自己完結型で発行とは

dotNetを使用して作成したアプリはフレームワーク依存と自己完結型の2つのモードで発行することができます。

  • フレームワーク依存の発行
    利用者側にdotNetの環境がインストールされていることを前提に実行ファイルだけの小規模な形でアプリを発行する。
    デメリットとして、利用者側にdotNetの環境がインストールされていない場合にアプリが動作しない。

  • 自己完結型の発行
    利用者側にdotNetの環境がインストールされていなくても実行できる形でアプリを発行する。
    デメリットとして、追加されるdotNet環境の情報が非常に大きい。
    (一例として、今回自分が作成したアプリの実行ファイル一式は3MBほどでしたが、自己完結型にすると70MB近くになりました。)

参考記事:

VisualStudioで発行する

プロジェクトの右クリックから「発行」を選んで設定をポチポチしていけばできます。
参考記事:

コマンドラインから発行する

dotnetコマンドを利用して発行することができます。

dotnet publish -r win-x64

コマンドラインからの発行ですが、今回はwindows用とlinux用の2つ用意したく、さらにGitHubにアップロードしたかったためzip圧縮までしてくれるバッチファイルも作りました。
リポジトリのトップに格納する想定です。(1、2、3のところは書き換えてください。)

@echo off
rem 自己完結型でwin-x86とlinux-x64向けに発行し、GitHubにアップロードするためにzip圧縮するバッチファイル
dotnet publish (1) -o (2) -c Release --self-contained=true -r linux-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true
powershell Compress-Archive -Path (2) -DestinationPath (2).zip -Force
dotnet publish (1) -o (3) -c Release --self-contained=true -r win-x86 -p:PublishSingleFile=true -p:PublishTrimmed=true
powershell Compress-Archive -Path (3) -DestinationPath (3).zip -Force
@echo --- Finished ---
pause > nul

(1):Project/Solutionを指定しています。
    例えばsrc/Application.csprojsrc/Application.slnです。
(2):linux-x64形式での出力パスを指定しています。
    例えばsrc/Application/bin/Release/linux-x64-publihです。
    指定しなくてもRelease以下のところにlinux-x64/publishで出力してくれますが、
    複数発行する際には名前を区別できるようしたほうが良いと思います。
(3):win-x86形式での出力パスを指定しています。(2)と大体同じです。

今回使用したdotnetのpublishコマンドについてのメモ
詳細:https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-publish

  • dotnet publish [<PROJECT>|<SOLUTION>]
    プロジェクトまたはソリューションを指定して発行します。
    指定しないと現在の作業ディレクトリが設定される

  • -o <OUTPUT_DIRECTORY>
    出力ディレクトリのパスを指定します。
    自己完結型の実行可能ファイルの場合、既定値は [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ に設定されます。

  • -c <CONFIGURATION>
    ビルド構成を定義します。 既定値は Debug です。

  • --self-contained=true
    trueで自己完結型、falseでフレームワーク依存になります。
    true (自己完結型) の場合は-rオプションが必須になります。

  • -r <RUNTIME_IDENTIFIER>
    指定されたランタイムのアプリケーションを発行します。
    上記の例だとwin-x86linux-x64を指定しました。
    詳しくは公式を参照ください:https://docs.microsoft.com/ja-jp/dotnet/core/rid-catalog

  • -p:PublishSingleFile=true
    ファイル一式をまとめたかたちに出力されます。(もろもろのDLLが1つのApplication.exeだけになる)
    若干ですが、ファイルサイズも小さくなります。

  • -p:PublishTrimmed=true
    不要なDLLを抑制してファイルサイズを小さくできます。
    今回作成したアプリは70MB→40MBくらいになりました。

最後の2つはこちらを参考にしました:https://tech.guitarrapc.com/entry/2019/08/19/003131#SCD-1

powershell Compress-Archiveというのはコマンドライン上でzip圧縮を行うには別途インストールが必要となるためPowerShellで行うためのコマンドです。 
-Pathにzip圧縮の対象を指定し、-DestinationPathに出力先を指定します。
-Forceをつけると既存ファイルがあった場合に上書きする設定になります。

3
3
0

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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?