「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[ASP.NET]]
--[[.NET Core]]
-[[戻る>.NET Core]]

* 目次 [#s808ee45]
#contents

*概要 [#b81a45da]
.NET Coreのコンソールアプリの発行とデプロイ
[[.NET Core]]のコンソールアプリの発行とデプロイ

*二つの発行方式 [#o6acb6b5]
**フレームワークに依存する展開(Framework-dependent deployment、FDD) [#yfb796bd]
.NET Frameworkでの配置と同様の仕組み。
*前提 [#i3dfdae9]
**Linux における .NET Core の前提条件 [#q71d96f4]
https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x

プリケーションが動作するOSに.NET Coreのランタイムが~
インストールされていることを前提としている仕組み。
>インストールが必要な依存ライブラリは Linux ディストリビューションごとに異なっている。

**[[.NET Core]] ネイティブ インストーラー [#z953008f]
-[[SCD>#w88a1ee1]]以外の方式([[FDD>#yfb796bd]] or Linux上でビルド)で、Linux 環境で [[.NET Core]] アプリケーションを~
実行する場合、[[.NET Core]] が依存するライブラリを事前にインストールする必要がある。

-各ディストリビューション用の [[.NET Core]] ネイティブ インストーラーにより、~
[[Linux における .NET Core の前提条件>#q71d96f4]]ライブラリがすべてインストールされる。

*方式 [#o6acb6b5]
どうも、[[FDD>#yfb796bd]]が推奨の方式らしい。~
[[SCD>#w88a1ee1]]では、バージョン不一致の問題が発生し易いもよう。

**FDD [#yfb796bd]
-FDD : Framework-dependent deployment

-フレームワークに依存する展開

--.NET Frameworkでの配置と同様の仕組み。

--展開先(アプリケーションが動作するOS)に、~
[[.NET Core]]のランタイムがインストールされていることを前提としている仕組み。

***メリット [#l14682b9]
以下が挙げられる。

-.NET Coreランタイムは共通であるため、実行や配置が容易になる。
--ビルド出力が軽量になるため。
--ビルド出力がOSによらず同一になるため。
-[[.NET Core]]ランタイムは共通であるため、実行や配置が容易になる。

--ディストリビューション毎に [[.NET Core]] の依存関係を考慮する必要が無い。
--パッケージ作成時にターゲット プラットフォーム (OS、アーキテクチャ) を考慮する必要が無い。
--バージョン不一致の問題が発生し難いもよう。

-ランタイム・フリーであるため、ビルド出力が、
--軽量になる。
--OSによらず同一になる。

***デメリット [#ucfd4cf3]
以下の2点が挙げられる。

-事前に.NET Coreランタイムのインストールが必要になる。
-.NET Coreランタイム側のバージョンアップでまれではあるが~
-事前に、展開先に、[[.NET Core]]ランタイムのインストールが必要になる。

-[[.NET Core]]ランタイム側のバージョンアップでまれではあるが~
開発-実行環境間でアプリの動作に変更が生じる可能性があること。

**自己完結型の展開(Self-contained deployment、SFD) [#w88a1ee1]
配置するバイナリのみで実行可能な形式(ランタイムも同時に配置する)
**SCD [#w88a1ee1]
-SCD : Self-contained deployment

-自己完結型の展開

--配置するバイナリのみで実行可能な形式(ランタイムも同時に配置する)

***メリット [#s811716a]
以下の2点が挙げられる。

-開発時にランタイムのインストールが不要。
-利用するランタイムを完全に固定できる。

***デメリット [#n7e8eb74]
以下の3点が挙げられる。
以下の点が挙げられる。

-OSごとにビルドを行ってバイナリを生成しないといけない。
-ランタイムが含まれるので配置するバイナリのサイズが大きくなる。
-配置先のマシンで占めるディスク容量が増える。
-[[.NET Core]]ランタイムは個別であるため、実行や配置が複雑になる。
--OSごとにビルドを行ってバイナリを生成しないといけない。
--パッケージ作成時にターゲット プラットフォーム (OS、アーキテクチャ) の選択が必要。
--バージョン不一致の問題が発生し易いもよう。

-バイナリにランタイムが含まれるので
--配置するバイナリのサイズが大きくなり、
--配置先のマシンで占めるディスク容量が増える。

*検証 [#w4375a40]
**FDD [#o066066b]
**[[こちら>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]] (on Linux) [#fbabb769]

**SFD [#ja4c6c01]
-RuntimeIdentifiersタグを足してビルド
-リリースビルドの下にできたlinux-x64フォルダをZIPする。
-これをLinux側に渡す(後の手順は[[コチラ>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]]のSFDの項を参照)。
**結果 [#rd0719f0]
-[[FDD>#yfb796bd]]も[[SCD>#w88a1ee1]]も大方動作したが、やはり、[[FDD>#yfb796bd]]の方が楽。
-しかし、[[コチラの例>dotnetコマンド#wd556f66]]などで、[[SCD>#w88a1ee1]]でないと動作しないケースなども見受けられた。

 <PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFrameworks>netcoreapp2.0;netcoreapp1.1</TargetFrameworks>
   <RuntimeIdentifiers>win-x64;linux-x64;osx-x64</RuntimeIdentifiers>
 </PropertyGroup>

*参考 [#q5cc4c84]
**Build Insider [#f1cd1fe4]
-C#による.NET Core入門~
http://www.buildinsider.net/language/dotnetcore
--(1).NET Coreとは? 開発環境(SDKとVisual Studio Code)のインストール~
http://www.buildinsider.net/language/dotnetcore/01
--(2)レッドハット版.NET Coreとマイクロソフト版.NET Coreの違い~
http://www.buildinsider.net/language/dotnetcore/02
--(3).NET Coreでプロジェクトを作成して開発してみよう~
http://www.buildinsider.net/language/dotnetcore/03
--(4).NET Coreでコンソールアプリを配置する~
http://www.buildinsider.net/language/dotnetcore/04
-.NET Coreでコンソールアプリを配置する - Build Insider~
https://www.buildinsider.net/language/dotnetcore/04

**[[ASP.NET Coreのデプロイ]] [#s08597cc]

**ツール [#v51df6fa]
***[[WSL上での.NET Core開発]]([[WSL>Windows Subsystem for Linux]]) [#ge588bea]
***[[Visual Studio Tools for Docker]] [#wd096a93]
***[[Visual Studio Kubernetes Tools]] [#r9a489b2]

**開発基盤部会 Wiki [#j98be859]

***[[.NET Coreのインストールとデプロイ>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]] [#rd7a28a4]
-CentOS
-Ubuntu

***[[ASP.NET Coreのインストールとデプロイ>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?ASP.NET%20Core%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]] [#u7b1dd57]
-CentOS
-Ubuntu

**Microsoft Docs [#h306c468]

-Linux における .NET Core の前提条件~
https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x
--.NET Core for Ubuntu 14.04、Ubuntu 16.04、Ubuntu 16.10 および Linux Mint 17、Linux Mint 18 (64 ビット)~
https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-ubuntu-1404-ubuntu-1604-ubuntu-1610--linux-mint-17-linux-mint-18-64-bit
--CentOS 7.1 (64 bit) および Oracle Linux 7.1 (64 bit) 用の .NET Core をインストールする~
https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-centos-71-64-bit--oracle-linux-71-64-bit

-.NET Core コマンドライン インターフェイス (CLI) ツール~
https://docs.microsoft.com/ja-jp/dotnet/core/tools/?tabs=netcore2x

-.NET Core アプリケーションの展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/

以下の「サードパーティの依存関係を含む。含まない。」は、~
NuGetする・しない程度の違いしかないので、手順は複雑化しない。

***FDD [#v6fe5c25]

-コマンド ライン インターフェイス (CLI) ツールを使用して .NET Core アプリを展開する~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli
--フレームワークに依存する展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli#framework-dependent-deployment
--サードパーティの依存関係を含む、フレームワークに依存する展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli#framework-dependent-deployment-with-third-party-dependencies

-Visual Studio で .NET Core アプリを展開する~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs
--フレームワークに依存する展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs#framework-dependent-deployment
--サードパーティの依存関係を含む、フレームワークに依存する展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs#framework-dependent-deployment-with-third-party-dependencies

***SCD [#ie53c21a]
-コマンド ライン インターフェイス (CLI) ツールを使用して .NET Core アプリを展開する~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli
--サードパーティの依存関係を含まない、自己完結型の展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli#simpleSelf
--サードパーティの依存関係を含む、自己完結型の展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-cli#self-contained-deployment-with-third-party-dependencies

-Visual Studio で .NET Core アプリを展開する~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs
--サードパーティの依存関係を含まない、自己完結型の展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs#simpleSelf
--サードパーティの依存関係を含む、自己完結型の展開~
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/deploy-with-vs#self-contained-deployment-with-third-party-dependencies

-.NET Core のランタイム識別子 (RID) のカタログ~
https://docs.microsoft.com/ja-jp/dotnet/core/rid-catalog

----
Tags: [[:.NET開発]], [[:.NET Core]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS