Skip to content

MS_DotNetCoreDeployment

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

.NET Coreのデプロイ

概要

.NET Core のコンソールアプリの発行とデプロイ

前提

Linux における .NET Core の前提条件

https://learn.microsoft.com/ja-jp/dotnet/core/install/linux

インストールが必要な依存ライブラリは Linux ディストリビューションごとに異なっている。

.NET Core ネイティブ インストーラー

  • SCD 以外の方式(FDD or Linux 上でビルド)で、
    Linux 環境で .NET Core アプリケーションを実行する場合、
    .NET Core が依存するライブラリを事前にインストールする必要がある。

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

方式

どうも、FDD が推奨の方式らしい。
SCD では、バージョン不一致の問題が発生し易いもよう。

FDD

  • FDD : Framework-dependent deployment

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

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

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

メリット

以下が挙げられる。

  • .NET Core ランタイムは共通であるため、実行や配置が容易になる。

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

    • 軽量になる。
    • OS によらず同一になる。

デメリット

以下の 2 点が挙げられる。

  • 事前に、展開先に、.NET Core ランタイムのインストールが必要になる。

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

SCD

  • SCD : Self-contained deployment

  • 自己完結型の展開

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

メリット

以下の 2 点が挙げられる。

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

デメリット

以下の点が挙げられる。

  • .NET Core ランタイムは個別であるため、実行や配置が複雑になる。

    • OS ごとにビルドを行ってバイナリを生成しないといけない。
    • パッケージ作成時にターゲット プラットフォーム (OS、アーキテクチャ) の選択が必要。
    • バージョン不一致の問題が発生し易いもよう。
  • バイナリにランタイムが含まれるので

    • 配置するバイナリのサイズが大きくなり、
    • 配置先のマシンで占めるディスク容量が増える。

補足(判断の目安と、その後の選択肢): 原文の
「FDD が推奨」という結論は、同じマシンに複数のアプリを置く
従来型のサーバー運用を前提とすれば妥当である。
ランタイムを 1 つ入れて共有する方が、管理も容量も楽になる。

一方、コンテナが前提になると評価が変わる。

【サーバーに直接置く】
   FDD が有利(ランタイムを共有、更新も OS 側で一括)

【コンテナに載せる】
   どちらでも良い。ベース イメージで aspnet を選べば実質 FDD
   → 「イメージを小さくしたい」なら SCD + トリミング

補足(現在の選択肢): SCD には後から次の機能が加わっている。

機能 内容
単一ファイル発行 PublishSingleFile で 1 つの実行ファイルにまとめる
トリミング PublishTrimmed で未使用のアセンブリを削る(サイズ削減)
Native AOT PublishAotネイティブ バイナリに事前コンパイル

Native AOT は起動が非常に速く、メモリも小さいため、
Azure Functions のような起動時間が効く用途や、
コンテナの小型化で選ばれる。
ただしリフレクションや動的コード生成に強い制約がかかるため、
使えるかどうかはライブラリ次第である。

補足(RID の指定): SCD ではランタイム識別子 (RID) の指定が要る。

# FDD(既定)
dotnet publish -c Release

# SCD
dotnet publish -c Release -r linux-x64 --self-contained true

原文の参考リンクにもある RID カタログは、
現在は linux-x64 / win-x64 / osx-arm64 のように
簡素化されている(かつての ubuntu.16.04-x64 のような
ディストリビューション固有の RID は非推奨)。

検証

こちら (on Linux)

.NET Coreのインストールとデプロイ(DNET_DotNetCoreInstallDeploy.md

結果

  • FDDSCD も大方動作したが、やはり、FDD の方が楽。
  • しかし、コチラの例などで、SCD でないと動作しないケースなども見受けられた。

参考

ツール

開発基盤部会 Wiki

.NET Coreのインストールとデプロイ(DNET_DotNetCoreInstallDeploy.md

  • CentOS
  • Ubuntu

ASP.NET Coreのインストールとデプロイ(DNET_ASPNETCoreInstallDeploy.md

  • CentOS
  • Ubuntu

Microsoft Learn

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

FDD

SCD


Tags: 移行, .NET開発, .NET Core

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally