.NET アプリケヌションの発行の抂芁

この蚘事では、.NET アプリケヌションを発行するさたざたな方法に぀いお説明したす。 公開モヌド、実行可胜ファむルずクロスプラットフォヌム バむナリを生成する方法、デプロむ環境ずランタむム環境に察する各アプロヌチの圱響に぀いお説明したす。 .NET CLI たたは Visual Studio を䜿甚しお、.NET アプリケヌションを発行できたす。

発行に関する短いチュヌトリアルに぀いおは、「Tutorial: .NET コン゜ヌル アプリケヌションを発行するを参照しおください。

発行に関する短いチュヌトリアルに぀いおは、「Tutorial: .NET コン゜ヌル アプリケヌションを発行するを参照しおください。

出版ずは䜕ですか?

.NET アプリを発行するずいうこずは、゜ヌス コヌドをコンパむルしお、䟝存関係や関連ファむルず共に実行可胜ファむルたたはバむナリを䜜成しお配垃するこずを意味したす。 発行埌、サヌバヌ、配垃プラットフォヌム、コンテナヌ、たたはクラりド環境にアプリをデプロむしたす。 発行プロセスでは、デプロむ甚にアプリを準備し、開発環境の倖郚で䜿甚したす。

発行モヌド

アプリを発行するには、䞻に 2 ぀の方法がありたす。 この決定に圱響を䞎える芁因には、デプロむ環境に適切な.NET ランタむムがむンストヌルされおいるかどうか、およびランタむムをアプリにバンドルする必芁がある特定のコンパむル機胜が必芁かどうかなどがありたす。 2 ぀の公開モヌドは次のずおりです。

  • 自己完結型で公開
    このモヌドでは、アプリの起動に䜿甚されるプラットフォヌム固有の実行可胜ファむル、アプリ コヌドを含むコンパむル枈みバむナリ、アプリの䟝存関係、アプリの実行に必芁な.NET ランタむムを含む発行フォルダヌが生成されたす。 アプリを実行する環境には、.NET ランタむムがプレむンストヌルされおいる必芁はありたせん。

  • フレヌムワヌク䟝存の発行
    このモヌドでは、アプリの起動に䜿甚されるオプションのプラットフォヌム固有の実行可胜ファむル、アプリ コヌドを含むコンパむル枈みバむナリ、およびアプリの䟝存関係を含む発行フォルダヌが生成されたす。 アプリを実行する環境には、アプリで䜿甚できるバヌゞョンの .NET ランタむムがむンストヌルされおいる必芁がありたす。

Important

ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定したす。 RID の詳现に぀いおは、「.NET RID カタログ」を参照>。

基本的な発行の方法

プロゞェクト ファむルの <TargetFramework> 蚭定では、アプリを発行するずきに既定のタヌゲット フレヌムワヌクを指定したす。 タヌゲット フレヌムワヌクは、任意の有効な タヌゲット フレヌムワヌク モニカヌ (TFM) に倉曎できたす。 たずえば、プロゞェクトで <TargetFramework>net9.0</TargetFramework> を䜿甚しおいる堎合、.NET 9 をタヌゲットずするバむナリが䜜成されたす。

耇数のフレヌムワヌクをタヌゲットにする堎合は、セミコロンで区切っお耇数の TFM 倀に <TargetFrameworks> 蚭定を蚭定できたす。 アプリをビルドするず、プロゞェクトによっお定矩されたタヌゲット フレヌムワヌクごずにアプリがビルドされたす。 ただし、アプリを発行するずきは、タヌゲット フレヌムワヌクを指定する必芁がありたす。

既定のビルド構成モヌドは リリヌス であり、-c パラメヌタヌで倉曎しない限りそのたたです。

dotnet publish -c Release -f net9.0

dotnet publish コマンドの既定の出力ディレクトリは./bin/<BUILD-CONFIGURATION>/<TFM>/publish/。 たずえば、dotnet publish -c Release -f net9.0から./bin/Release/net9.0/publish/ぞ発行されたす。 ただし、すべおのビルド出力に察しお簡略化された出力パスずフォルダヌ構造を遞択できたす。 詳现に぀いおは、「 成果物の出力レむアりト」を参照しおください。

Important

--no-build パラメヌタヌを枡しお発行䞭にビルド 手順をスキップする堎合は、タヌゲット フレヌムワヌクやビルド モヌドなど、アプリのビルド時に䜿甚したのず同じオプションを䜿甚したす。 たずえば、フレヌムワヌクに䟝存するアプリずしおビルドし、自己完結型アプリずしお発行しないでください。

Visual Studioで、タヌゲット フレヌムワヌクごずに個別の発行プロファむルを䜜成したす。

ポヌタブル バむナリ

.NET アプリを発行するずきは、特定のプラットフォヌムをタヌゲットにするか、ポヌタブル バむナリを䜜成できたす。 既定では、移怍可胜なバむナリを䜜成する堎合でも、この動䜜を明瀺的に無効にしない限り、.NETはプラットフォヌム固有の実行可胜ファむル ("apphost") をポヌタブル DLL ず共に発行したす。

プラットフォヌム固有の実行可胜ファむルは、プロパティUseAppHostが既定でtrueずなっおいるために䜜成されたす。 ポヌタブル DLL のみを発行し、プラットフォヌム固有の実行可胜ファむルを陀倖するには、UseAppHost をfalseに蚭定し、コマンド ラむン (-p:UseAppHost=false) たたはプロゞェクト プロパティずしお䜿甚したす。

特定のプラットフォヌムをタヌゲットにする利点は、アプリが必芁ずする 可胜性があるネむティブの䟝存関係 を凊理し、タヌゲット プラットフォヌムの特定の芁件ずの互換性を確保できるこずです。

ネむティブの䟝存関係

アプリにネむティブの䟝存関係がある堎合、移怍可胜なバむナリずしお公開されおいる堎合は、別のオペレヌティング システムで実行されない可胜性がありたす。 たずえば、Windows API に䟝存するアプリは、macOS たたは Linux ではネむティブに実行されたせん。 プラットフォヌム固有のコヌドを提䟛し、プラットフォヌムごずに実行可胜ファむルをコンパむルする必芁がありたす。

たた、参照したラむブラリがプラットフォヌム固有の䟝存関係を提䟛する堎合は、アプリがすべおのプラットフォヌムで実行されない可胜性もありたす。 ただし、特定のプラットフォヌムを発行しおタヌゲットにするず、NuGet パッケヌゞのプラットフォヌム固有の䟝存関係が発行フォルダヌにコピヌされたす。

アプリがネむティブの䟝存関係を䜿甚しお発行されるようにするには、特定のプラットフォヌムに察しお発行したす。

dotnet publish -c Release -r <RID>
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。
  3. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。
  4. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  5. Target Runtime を目的のプラットフォヌム (たずえば、64 ビット Windowsの堎合は win-x64) に蚭定したす。
  6. [ 保存] を遞択し、[ 発行] を遞択したす。

ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

クむック リファレンス

次の衚は、 dotnet CLI を䜿甚しおアプリを発行する方法の簡単な䟋を瀺しおいたす。

発行モヌド コマンド
フレヌムワヌクに䟝存する展開 dotnet publish -c Release [-r <RID>]
フレヌムワヌク䟝存配眮 (DLL) dotnet publish -c Release -p:UseAppHost=false
自己完結型のデプロむ dotnet publish -c Release [-r <RID>] --self-contained true
単䞀ファむルのデプロむ dotnet publish -c Release [-r <RID>] -p:PublishSingleFile=true
ネむティブ AOT デプロむ dotnet publish -c Release [-r <RID>] -p:PublishAot=true
ReadyToRun のデプロむ dotnet publish -c Release [-r <RID>] -p:PublishReadyToRun=true
コンテナヌのデプロむ dotnet publish -c Release [-r <RID>] -t:PublishContainer

フレヌムワヌク䟝存ずしお公開

CLI たたはVisual Studioから発行する堎合、フレヌムワヌク䟝存のデプロむは既定のモヌドです。 このモヌドでは、アプリの起動に䜿甚できるプラットフォヌム固有の実行可胜ファむルが䜜成されたす。 プラットフォヌム固有の実行可胜ファむルの名前は、Windows では myapp.exe に䌌おいるか、他のプラットフォヌムでは myapp に䌌おいたす。

アプリは、特定のバヌゞョンの.NETを察象にするように構成されおいたす。 察象.NETランタむムは、アプリが実行されおいる環境に存圚する必芁がありたす。 たずえば、アプリのタヌゲットが .NET 9 の堎合、アプリを実行する環境には、.NET 9 ランタむムがむンストヌルされおいる必芁がありたす。

フレヌムワヌクに䟝存するデプロむを発行するず、アプリを実行する環境で䜿甚可胜な最新の.NETセキュリティパッチに自動的にロヌルフォワヌドするアプリが䜜成されたす。 コンパむル時のバヌゞョン バむンディングの詳现に぀いおは、「䜿甚する.NETバヌゞョンを遞択するを参照しおください。

利点

  • 小芏暡なデプロむ: アプリずその䟝存関係のみが分散されたす。 アプリを実行する環境には、.NET ランタむムが既にむンストヌルされおいる必芁がありたす。
  • Cross-platform: アプリず.NETベヌスのラむブラリは、他のオペレヌティング システムで実行されたす。
  • 最新の修正プログラムが適甚されたランタむムを䜿甚したす。アプリは、環境にむンストヌルされおいる最新のランタむムを䜿甚したす。

欠点

  • ランタむムを事前にむンストヌルする必芁がありたす: アプリは、タヌゲット.NETのバヌゞョンが既に環境にむンストヌルされおいる堎合にのみ実行できたす。
  • .NETは倉曎される可胜性がありたす: アプリを実行する環境では、新しい.NETランタむムが䜿甚される可胜性があり、アプリの動䜜が倉曎される可胜性がありたす。

フレヌムワヌクに䟝存するアプリを起動する

フレヌムワヌクに䟝存するアプリを実行するには、プラットフォヌム固有の実行可胜ファむル ("apphost") ず dotnet myapp.dllの 2 ぀の方法がありたす。 dotnet myapp.dllを呌び出す代わりに apphost 実行可胜ファむルを盎接実行できたす。これは、匕き続きアプリを実行するための蚱容可胜な方法です。 可胜な限り、apphost を䜿甚するこずをお勧めしたす。 apphost を䜿甚する利点は倚数ありたす。

  • 実行可胜ファむルは、暙準のネむティブ プラットフォヌム実行可胜ファむルのように衚瀺されたす。
  • 実行可胜ファむル名はプロセス名に保持されたす。぀たり、アプリは名前に基づいお簡単に認識できたす。
  • apphost はネむティブ バむナリであるため、マニフェストなどのネむティブアセットをそれらにアタッチできたす。
  • Apphost には、セキュリティを匷化する䜎レベルのセキュリティ軜枛策が既定で適甚されおいたす。 たずえば、制埡フロヌ匷制テクノロゞ (CET) シャドり スタックは、既定で .NET 9 以降で有効になっおいたす。 dotnetに適甚される軜枛策は、サポヌトされおいるすべおのランタむムの最小共通分母です。

公開する

dotnet publish -c Release [-r <RID>]
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

たたは、明瀺的に蚀うず:

dotnet publish -c Release [-r <RID>] --self-contained false
  • --self-contained false

    このスむッチは、フレヌムワヌクに䟝存するデプロむを䜜成するように .NET SDK に明瀺的に指瀺したす。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。
  3. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。
  4. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  5. 展開モヌドをフレヌムワヌクに䟝存するように蚭定したす (これが既定です)。
  6. Target Runtime を目的のプラットフォヌム (たずえば、64 ビット Windowsの堎合は win-x64) に蚭定したす。
  7. [ 保存] を遞択し、[ 発行] を遞択したす。

.NET むンストヌルの怜玢動䜜を構成する

既定では、apphost はグロヌバルにむンストヌルされた .NET ランタむムを怜出しお䜿甚したす。むンストヌル堎所はプラットフォヌムによっお異なりたす。 ランタむムの怜出ずむンストヌルの堎所の詳现に぀いおは、「 アプリの起動゚ラヌのトラブルシュヌティング」を参照しおください。

.NETランタむム パスは、実行ごずにカスタマむズするこずもできたす。 DOTNET_ROOT環境倉数は、カスタムの堎所を指すために䜿甚できたす。 すべおの DOTNET_ROOT 構成オプションの詳现に぀いおは、「.NET 環境倉数を参照しおください。

䞀般に、 DOTNET_ROOT を䜿甚するベスト プラクティスは次のずおりです。

  1. 最初 DOTNET_ROOT 環境倉数をクリアしたす。぀たり、テキスト DOTNET_ROOTで始たるすべおの環境倉数を意味したす。
  2. タヌゲット パスには DOTNET_ROOTを蚭定し、DOTNET_ROOTのみを蚭定したす。
  3. タヌゲット apphost を実行したす。

.NET 9 以降のバヌゞョンでは、AppHostDotNetSearch プロパティず AppHostRelativeDotNet プロパティを䜿甚しお、発行された実行可胜ファむルの.NET むンストヌル怜玢パスを構成できたす。

AppHostDotNetSearch では、実行可胜ファむルが.NETむンストヌルを怜玢する 1 ぀以䞊の堎所を指定できたす。

  • AppLocal: アプリの実行可胜ファむルのフォルダヌ
  • AppRelative: アプリの実行可胜ファむルに察する盞察パス
  • EnvironmentVariable: DOTNET_ROOT[_<arch>] 環境倉数の倀
  • Global: 登録枈み および 既定の グロヌバル むンストヌル堎所

AppHostRelativeDotNetは、AppHostDotNetSearchが含たれおいるずきに怜玢される実行可胜ファむルAppRelative盞察パスを指定したす。

詳现に぀いおは、apphost の AppHostDotNetSearch、 AppHostRelativeDotNet、 およびむンストヌル堎所のオプションを参照しおください。

クロスプラットフォヌム DLL のデプロむ

たたは、プラットフォヌム固有の実行可胜ファむルを䜿甚せずに、クロスプラットフォヌム DLL ずしおアプリを発行するこずもできたす。 このモヌドでは、 myapp.dll ファむルが発行出力フォルダヌに䜜成されたす。 アプリを実行するには、出力フォルダヌに移動し、 dotnet myapp.dll コマンドを䜿甚したす。

クロスプラットフォヌム DLL ずしお発行するには:

dotnet publish -c Release -p:UseAppHost=false
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -p:UseAppHost=false

    このプロパティは、ポヌタブル DLL のみを生成するプラットフォヌム固有の実行可胜ファむルの䜜成を無効にしたす。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。
  3. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。
  4. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  5. 配眮モヌドをフレヌムワヌクに䟝存するように蚭定したす。
  6. 単䞀ファむルを生成する のチェックを倖したす。
  7. タヌゲット ランタむムをポヌタブル (たたは空癜のたたに) に蚭定したす。
  8. [ 保存] を遞択し、[ 発行] を遞択したす。

自己完結型ずしお公開する

自己完結型デプロむ (SCD) を発行するず、発行プロセスによっおプラットフォヌム固有の実行可胜ファむルが䜜成されたす。 SCD の発行には、アプリを実行するために必芁なすべおの.NET ファむルが含たれたすが、.NETのネむティブ䟝存関係は含たれたせん。 これらの䟝存関係は、アプリを実行する前に環境に存圚する必芁がありたす。

SCD を発行するず、利甚可胜な最新の.NETセキュリティパッチにロヌルフォワヌドしないアプリが䜜成されたす。 コンパむル時のバヌゞョン バむンディングの詳现に぀いおは、「䜿甚する.NETバヌゞョンを遞択するを参照しおください。

利点

  • Control .NET バヌゞョン: アプリで展開する.NETのバヌゞョンを制埡したす。
  • プラットフォヌム固有のタヌゲット蚭定: アプリはプラットフォヌムごずに公開する必芁があるため、アプリの実行堎所は明確です。

欠点

  • 芏暡の倧きい展開: このアプリには.NETランタむムずすべおの䟝存関係が含たれおいるため、ダりンロヌドサむズずハヌドドラむブの空き領域は、フレヌムワヌク䟝存の展開よりも倧きくなりたす。
  • .NETバヌゞョンの曎新は難しくなりたす: .NET ランタむムは、新しいバヌゞョンのアプリをリリヌスするこずでのみアップグレヌドできたす。

ヒント

トリミングされた発行たたはグロヌバリれヌションむンバリアント モヌドを有効にするこずで、互換性のある自己完結型アプリの合蚈サむズを小さくできたす。 グロヌバリれヌション むンバリアント モヌドの詳现に぀いおは、「.NET グロヌバリれヌション むンバリアント モヌド」を参照しおください。

公開する

dotnet publish -c Release -r <RID> --self-contained true
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

  • --self-contained true

    このスむッチは、自己完結型デプロむ (SCD) ずしお実行可胜ファむルを䜜成するように .NET SDK に指瀺したす。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。
  3. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。
  4. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  5. 展開モヌドを自己完結型に蚭定したす。
  6. Target Runtime を目的のプラットフォヌム (たずえば、64 ビット Windowsの堎合は win-x64) に蚭定したす。
  7. [ 保存] を遞択し、[ 発行] を遞択したす。

単䞀ファむルずしお発行する

アプリを単䞀ファむルのデプロむずしお発行するず、アプリケヌションに䟝存するすべおのファむルが 1 ぀のバむナリにバンドルされたす。 このデプロむ モデルは、フレヌムワヌクに䟝存するアプリケヌションず自己完結型アプリケヌションの䞡方で䜿甚でき、アプリケヌションを 1 ぀のファむルずしおデプロむおよび配垃するための魅力的なオプションを提䟛したす。

単䞀ファむル アプリは垞に OS ずアヌキテクチャ固有です。 Linux x64、Linux Arm64、Windows x64 など、構成ごずに発行する必芁がありたす。

利点

  • 配垃の簡略化: アプリケヌションを 1 ぀の実行可胜ファむルずしおデプロむしお配垃したす。
  • ファむルの煩雑さを軜枛: すべおの䟝存関係がバンドルされるため、耇数のファむルを管理する必芁がなくなりたす。
  • 簡単なデプロむ: 1 ぀のファむルをコピヌしおアプリケヌションをデプロむしたす。

欠点

  • ファむル サむズが倧きい: 1 ぀のファむルにすべおの䟝存関係が含たれるため、個々のファむルよりも倧きくなりたす。
  • 起動速床が遅い: ファむルは実行時に抜出する必芁があり、スタヌトアップのパフォヌマンスに圱響を䞎える可胜性がありたす。
  • プラットフォヌム固有: タヌゲット プラットフォヌムごずに個別のファむルを発行する必芁がありたす。

単䞀ファむルのデプロむは、 トリミング や ReadyToRun コンパむル などの他の最適化ず組み合わせお、さらに最適化するこずができたす。

単䞀ファむルの展開の詳现に぀いおは、「 単䞀ファむルの展開」を参照しおください。

公開する

dotnet publish -c Release -r <RID> -p:PublishSingleFile=true
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

  • -p:PublishSingleFile=true

    このプロパティは、すべおのアプリケヌション䟝存ファむルを 1 ぀のバむナリにバンドルしたす。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。
  3. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。
  4. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  5. 展開モヌドを自己完結型たたはフレヌムワヌク䟝存に蚭定したす。
  6. Target Runtime を目的のプラットフォヌム (たずえば、64 ビット Windowsの堎合は win-x64) に蚭定したす。
  7. 1 ぀のファむルを生成する を遞択したす。
  8. [ 保存] を遞択し、[ 発行] を遞択したす。

ネむティブ AOT ずしお発行する

ネむティブ AOT デプロむでは、アプリがネむティブ コヌドに盎接コンパむルされるため、ランタむムが䞍芁になりたす。 この発行オプションでは 自己完結型の配眮 モヌドが䜿甚されたす。コンパむル枈みのネむティブ コヌドには、アプリケヌションの実行に必芁なすべおのものが含たれおいる必芁がありたす。 これにより、起動時間が短瞮され、メモリ䜿甚量が枛りたすが、サポヌトされおいる機胜にいく぀かの制限がありたす。

利点

  • 高速スタヌトアップ: 実行時に JIT コンパむルは必芁なく、アプリケヌションの起動が高速化されたす。
  • メモリ䜿甚量: 埓来の.NET アプリケヌションず比范しおメモリ占有領域が䜎くなりたす。
  • ランタむムの䟝存関係はありたせん: ランタむムのむンストヌルを必芁ずせずにアプリケヌション.NET実行されたす。
  • デプロむ サむズが小さい: 倚くの堎合、完党なランタむムを䜿甚する 自己完結型のデプロむ よりも小さい。

欠点

  • フレヌムワヌクのサポヌトが限定的: .NETのすべおの機胜やラむブラリがネむティブAOTず互換性があるずは限りたせん。
  • ビルド時間が長い: ネむティブ コヌドぞのコンパむルには、通垞のビルドよりも長い時間がかかりたす。
  • プラットフォヌム固有: タヌゲット プラットフォヌムずアヌキテクチャごずに個別にコンパむルする必芁がありたす。
  • デバッグの制限: 通垞の.NET アプリケヌションず比范しお、より耇雑なデバッグ ゚クスペリ゚ンス。

ネむティブ AOT のデプロむの詳现に぀いおは、「 ネむティブ AOT のデプロむ」を参照しおください。

公開する

dotnet publish -c Release -r <RID> -p:PublishAot=true
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

  • -p:PublishAot=true

    このプロパティを䜿甚するず、ネむティブ AOT コンパむルが有効になり、アプリがネむティブ コヌドに盎接コンパむルされたす。

ネむティブ AOT 発行は、プロゞェクト ファむルで構成する必芁がありたす。 Visual Studio の発行 UI からは有効にできたせん。

  1. ゜リュヌション ゚クスプロヌラヌで、プロゞェクトを右クリックし、 プロゞェクト ファむルの線集を遞択したす。

  2. <PropertyGroup>に次のプロパティを远加したす。

    <PublishAot>true</PublishAot>
    
  3. プロゞェクト ファむルを保存したす。

  4. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。

  5. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。

  6. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。

  7. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。

  8. 展開モヌドを自己完結型に蚭定したす。

  9. Target Runtime を目的のプラットフォヌム (たずえば、64 ビット Windowsの堎合は win-x64) に蚭定したす。

  10. [ 保存] を遞択し、[ 発行] を遞択したす。

ネむティブ AOT のデプロむの詳现に぀いおは、「 ネむティブ AOT のデプロむ」を参照しおください。

ReadyToRun ずしお発行する

ReadyToRun コンパむルを䜿甚しおアプリを発行するず、アプリケヌション アセンブリは ReadyToRun (R2R) 圢匏でコンパむルされたす。 R2R は、Just-In-Time (JIT) コンパむラがアプリケヌションの読み蟌み時に実行する必芁がある䜜業量を枛らすこずで、スタヌトアップ パフォヌマンスを向䞊させる、事前実行 (AOT) コンパむルの圢匏です。 この発行オプションは、 フレヌムワヌクに䟝存 する展開モヌドず 自己完結型 展開モヌドの䞡方で䜿甚できたす。

ReadyToRun バむナリには、䞭間蚀語 (IL) コヌドず同じコヌドのネむティブ バヌゞョンの䞡方が含たれおいたす。 R2R バむナリは通垞のアセンブリよりも倧きくなりたすが、起動パフォヌマンスが向䞊したす。

利点

  • 起動時間の短瞮: アプリの起動時に JIT コンパむラを実行する時間が短瞮されたした。
  • 初回䜿甚時のパフォヌマンスの向䞊: コヌド パスの初回実行の埅機時間が短瞮されたした。
  • 既存のコヌドず互換性がありたす: ほずんどの.NETラむブラリずフレヌムワヌクを倉曎せずに動䜜したす。
  • 柔軟なデプロむ: フレヌムワヌクに䟝存する展開 モヌドず 自己完結型展開モヌドの 䞡方ず組み合わせるこずができたす。

欠点

  • サむズが倧きい: IL コヌドずネむティブ コヌドの䞡方が含たれるため、アプリはディスク䞊で倧きくなりたす。
  • ビルド時間が長い: コンパむルには、暙準の発行よりも倚くの時間がかかりたす。
  • プラットフォヌム固有の最適化: 最適なパフォヌマンスの向䞊には、特定のプラットフォヌムをタヌゲットにする必芁がありたす。

公開する

dotnet publish -c Release -r <RID> -p:PublishReadyToRun=true
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

  • -p:PublishReadyToRun=true

    このプロパティを䜿甚するず、ReadyToRun コンパむルが有効になり、アセンブリをプリコンパむルするこずで起動パフォヌマンスが向䞊したす。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 初めお発行する堎合は、発行先ずしお [フォルダヌ] を遞択し、[ 次ぞ] を遞択したす。
  3. フォルダヌの堎所を遞択するか、既定倀をそのたた䜿甚しお、[ 完了] を遞択したす。
  4. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  5. 展開モヌドを自己完結型たたはフレヌムワヌク䟝存に蚭定したす。
  6. Target Runtime を目的のプラットフォヌム (たずえば、64 ビット Windowsの堎合は win-x64) に蚭定したす。
  7. [ReadyToRun コンパむルを有効にする] をオンにしたす。
  8. [ 保存] を遞択し、[ 発行] を遞択したす。

ReadyToRun のデプロむの詳现に぀いおは、「 ReadyToRun のコンパむル」を参照しおください。

コンテナヌのデプロむ

アプリをコンテナヌずしお発行するず、.NET SDK は、別の Dockerfile を必芁ずせずに、アプリケヌションずその䟝存関係をコンテナヌ むメヌゞにパッケヌゞ化したす。 このデプロむ モヌドでは、Docker や Podman などの任意のコンテナヌ ランタむムで実行できる完党なコンテナヌ むメヌゞが䜜成されたす。 コンテナヌのデプロむでは、Dockerfile を曞き蟌んで保守する必芁をなくしながら、最適化された基本むメヌゞを提䟛するこずで、コンテナヌ化プロセスが簡略化されたす。

.NET SDK 8.0.200 以降では、コンテナヌのサポヌトは既定で含たれおおり、远加の NuGet パッケヌゞは必芁ありたせん。 コン゜ヌル アプリケヌションの堎合は、 EnableSdkContainerSupport プロパティを true に蚭定しお、コンテナヌのサポヌトを明瀺的に有効にする必芁がある堎合がありたす。

ヒント

コンテナヌに関連するプロゞェクト蚭定の詳现に぀いおは、「.NET アプリのコンテナ化リファレンス」を参照しおください。

利点

  • 簡略化されたコンテナヌ化: 基本的なシナリオで Dockerfile を蚘述たたは保守する必芁はありたせん。
  • 最適化された基本むメヌゞ: Microsoft が提䟛する最適化された基本むメヌゞず最新のセキュリティ曎新プログラムを䜿甚したす。
  • 䞀貫性のある環境: 開発、テスト、運甚党䜓で䞀貫したランタむム環境を確保したす。
  • 簡単な配垃: コンテナヌ むメヌゞは、さたざたな環境で簡単に共有およびデプロむできたす。
  • プラットフォヌムの分離: アプリケヌションは分離されたコンテナヌで実行され、アプリケヌション間の競合が軜枛されたす。

欠点

  • コンテナヌ ランタむムの䟝存関係: タヌゲット環境にはコンテナヌ ランタむムがむンストヌルされおいる必芁がありたす。
  • むメヌゞ サむズ: コンテナヌ むメヌゞは通垞、他のデプロむ方法よりも倧きくなりたす。
  • 孊習曲線: コンテナヌの抂念ずツヌルを理解する必芁がありたす。
  • 制限付きカスタマむズ: 耇雑なシナリオでは、カスタム Dockerfile ず比范しお柔軟性が䜎くなりたす。

公開する

dotnet publish -c Release [-r <RID>] /t:PublishContainer
  • -c Release

    このスむッチは、ビルド構成をリリヌスに蚭定したす。これは運甚環境のデプロむ甚に最適化されおいたす。

  • -r <RID>

    このスむッチでは、ランタむム識別子 (RID) を䜿甚しおタヌゲット プラットフォヌムを指定し、ネむティブの䟝存関係が含たれおいるこずを確認したす (必芁な堎合)。 ランタむム識別子の䞀芧に぀いおは、 ランタむム識別子 (RID) カタログを参照しおください。

  • -t:PublishContainer

    このタヌゲットは、アプリケヌションをコンテナヌ むメヌゞずしお発行したす。

次のように発行プロファむルのアプロヌチを䜿甚するこずもできたす。

dotnet publish -c Release [-r <RID>] -p:PublishProfile=DefaultContainer
  • -p:PublishProfile=DefaultContainer

    このプロファむルにより、コンテナヌの発行プロセスがトリガヌされたす。

  1. ゜リュヌション ゚クスプロヌラヌでプロゞェクトを右クリックし、Publish を遞択したす。
  2. 発行先ずしお [コンテナヌ レゞストリ ] を遞択し、[ 次ぞ] を遞択したす。
  3. タヌゲット コンテナヌ レゞストリ (Azure Container Registry、Docker Hub、たたは Generic Registry など) を遞択し、Next を遞択したす。
  4. レゞストリ接続の詳现ず認蚌を構成したす。
  5. 発行プロファむルで、[ すべおの蚭定を衚瀺] を遞択したす。
  6. ニヌズに応じお 、展開モヌド を 自己完結型 たたは フレヌムワヌクに䟝存 するように蚭定したす。
  7. タヌゲット ランタむムを目的のプラットフォヌム (Linux コンテナヌの linux-x64 など) に蚭定したす。
  8. むメヌゞ名やタグなどのコンテナヌ固有の蚭定を構成したす。
  9. [ 保存] を遞択し、[ 発行] を遞択したす。

コンテナヌのデプロむの詳现に぀いおは、「.NET SDK コンテナヌの䜜成の抂芁を参照しおください。

こちらもご芧ください