.NET アプリケーションの発行の概要
.NET を使用して作成したアプリケーションは、2 つの異なるモードで発行できます。このモードは、ユーザーがアプリを実行する方法に影響します。
自己完結型 としてアプリ
アプリを フレームワーク依存の として発行すると、アプリケーション自体とその依存関係のみが含まれるようになります。 アプリケーションのユーザーは、.NET ランタイムを個別にインストールする必要があります。
どちらの発行モードでも、既定でプラットフォーム固有の実行可能ファイルが生成されます。 フレームワークに依存するアプリケーションは実行可能ファイルなしで作成でき、これらのアプリケーションはクロスプラットフォームです。
実行可能ファイルが生成されるときに、ランタイム識別子 (RID) を使用してターゲット プラットフォームを指定できます。 RID の詳細については、.NET RID カタログ
次の表は、アプリをフレームワーク依存または自己完結型として発行するために使用されるコマンドの概要を示しています。
種類 | コマンド |
---|---|
現在のプラットフォーム用のフレームワーク依存の実行可能ファイル。 | dotnet publish |
特定のプラットフォーム用のフレームワーク依存の実行可能ファイル。 | dotnet publish -r <RID> |
フレームワークに依存するバイナリ。 | dotnet publish |
自己完結型の実行可能ファイル。 | dotnet publish -r <RID> --self-contained |
詳細については、「.NET dotnet publish コマンド」を参照してください。
実行可能ファイルを生成する
実行可能ファイルはクロスプラットフォームではなく、オペレーティング システムと CPU アーキテクチャに固有です。 アプリを発行して実行可能ファイルを作成するときは、自己完結型 またはフレームワークに依存する
次のコマンドは実行可能ファイルを生成します。
種類 | コマンド |
---|---|
現在のプラットフォーム用のフレームワーク依存実行ファイル。 | dotnet publish |
特定のプラットフォーム用のフレームワーク依存の実行可能ファイル。 | dotnet publish -r <RID> |
自己完結型実行可能プログラム。 | dotnet publish -r <RID> --self-contained |
クロスプラットフォーム バイナリを生成する
クロスプラットフォーム バイナリは、フレームワークに依存するとしてアプリ dotnet <filename.dll>
コマンドを使用して実行され、任意のプラットフォームで実行できます。
ターゲットの .NET ランタイムが既にインストールされている限り、クロスプラットフォーム バイナリは任意のオペレーティング システムで実行できます。 対象の .NET ランタイムがインストールされていない場合、アプリがロールフォワードするように構成されている場合、アプリは新しいランタイムを使用して実行される可能性があります。 詳細については、フレームワーク依存のアプリのロールフォワード を参照してください。
dotnet
コマンドを使用して、プラットフォーム固有の実行可能ファイルとして、またはクロスプラットフォーム バイナリとしてアプリを実行できます。 プラットフォーム固有の実行可能ファイルでの起動と通常のサーバーアプリ用のdotnet
コマンドによる起動の場合、アプリの動作に違いはないはずです。ただし、プラットフォーム固有の実行可能ファイルを使用すると、基になるOSとの統合がより優れたものになります。 例えば:
dotnet
ではなく、プロセスの一覧にアプリケーション実行可能ファイルの名前が表示されます。複数ある場合は混乱する可能性があります。- OS 固有の機能を使用して、プラットフォーム固有の実行可能ファイルをカスタマイズできます。 たとえば、Windowsでの既定のスタック サイズの構成については、この説明
参照してください。
次のコマンドを実行すると、クロスプラットフォーム バイナリが生成されます。
種類 | コマンド |
---|---|
フレームワークに依存するクロスプラットフォーム バイナリ 。 | dotnet publish |
フレームワーク依存の発行
フレームワークに依存して公開されるアプリはクロスプラットフォームであり、.NET ランタイムは含まれません。 .NET ランタイムをインストールするには、アプリのユーザーが必要です。
アプリをフレームワーク依存として発行すると、dll ファイルとして クロスプラットフォーム バイナリ と、現在のプラットフォームを対象とする プラットフォーム固有の実行可能ファイル が生成されます。 dll はクロスプラットフォームですが、実行可能ファイルはクロスプラットフォームではありません。 たとえば、word_reader という名前のアプリを発行し、Windows を対象とする場合、word_reader.dllと共に word_reader.exe 実行可能ファイルが作成されます。 Linux または macOS をターゲットにすると、word_reader.dllと共に word_reader 実行可能ファイルが作成されます。 アプリがプラットフォーム固有の実装を持つ NuGet パッケージを使用している場合、すべてのプラットフォームの依存関係が publish\runtimes\{platform} フォルダーにコピーされます。
アプリのクロスプラットフォーム バイナリは、dotnet <filename.dll>
コマンドを使用して実行でき、任意のプラットフォームで実行できます。
プラットフォーム固有およびフレームワークに依存
dotnet publish
コマンドに -r <RID>
パラメーターを渡すことで、プラットフォーム固有のフレームワーク依存アプリを発行できます。 この方法での発行は、フレームワークに依存する
技術的には生成されるバイナリはクロスプラットフォームですが、特定のプラットフォームをターゲットにすることで、アプリがクロスプラットフォームで実行されるとは限りません。 dotnet <filename.dll>
実行できますが、不足しているプラットフォーム固有の依存関係にアクセスしようとすると、アプリがクラッシュする可能性があります。
RID の詳細については、.NET RID カタログ
利点
小規模なデプロイ
アプリとその依存関係のみが配布されます。 .NET ランタイムとライブラリはユーザーによってインストールされ、すべてのアプリがランタイムを共有します。クロスプラットフォーム
あなたのアプリと任意の.NET ベースのライブラリは、他のオペレーティング システムで実行されます。 アプリのターゲット プラットフォームを定義する必要はありません。 .NET ファイル形式の詳細については、「.NET アセンブリ ファイル形式を参照してください。 修正プログラムが適用された最新のランタイム を使用します
このアプリでは、ターゲット システムにインストールされている最新のランタイム (.NET の対象となるメジャー マイナー ファミリ内) が使用されます。 つまり、アプリでは、.NET ランタイムの最新の修正プログラムが適用されたバージョンが自動的に使用されます。 この既定の動作はオーバーライドできます。 詳細については、フレームワーク依存のアプリのロールフォワードに関する情報 を参照してください。
欠点
ランタイム をプレインストールする必要があります
アプリが実行できるのは、アプリがターゲットとする .NET のバージョンがホスト システムに既にインストールされている場合のみです。 特定のバージョンの .NET を必要とするか、新しいバージョンの .NET を許可するように、アプリのロールフォワード動作を構成できます。 詳細については、フレームワークに依存するアプリのアップグレード手順について、およびを参照してください。.NETは変更される可能性があります
.NET ランタイムとライブラリは、アプリが実行されているコンピューターで更新される可能性があります。 まれに、ほとんどのアプリで .NET ライブラリを使用すると、アプリの動作が変わる可能性があります。 アプリで新しいバージョンの .NET を使用する方法を構成できます。 詳細については、フレームワークに依存するアプリに関するのロールフォワードを参照してください。
使用例
クロスプラットフォームおよびフレームワーク依存としてアプリを発行します。 現在のプラットフォームを対象とする実行可能ファイルが、dll ファイルと共に作成されます。 プラットフォーム固有の依存関係はすべて、アプリで公開されます。
dotnet publish
プラットフォーム固有およびフレームワーク依存としてアプリを発行します。 dll ファイルと共に Linux 64 ビット実行可能ファイルが作成されます。 対象プラットフォームの依存関係のみがアプリと共に公開されます。
dotnet publish -r linux-x64
自己完結型の発行
自己完結型としてアプリを発行すると、プラットフォーム固有の実行可能ファイルが生成されます。 出力発行フォルダーには、.NET ライブラリとターゲット ランタイムを含む、アプリのすべてのコンポーネントが含まれています。 アプリは他の .NET アプリから分離されており、ローカルにインストールされた共有ランタイムは使用しません。 アプリのユーザーが .NET をダウンロードしてインストールする必要はありません。
dotnet publish
コマンドに --self-contained
パラメーターを渡すことで、自己完結型アプリを発行できます。 実行可能バイナリは、指定されたターゲット プラットフォームに対して生成されます。 たとえば、word_readerという名前のアプリがあり、Windows 用の自己完結型実行可能ファイルを発行すると、word_reader.exe ファイルが作成されます。 Linux または macOS 用に発行すると、word_reader ファイルが作成されます。 ターゲット プラットフォームとアーキテクチャは、dotnet publish
コマンドの -r <RID>
パラメーターで指定します。 RID の詳細については、.NET RID カタログ
プラットフォーム固有の依存関係を含む NuGet パッケージなど、アプリにプラットフォーム固有の依存関係がある場合、これらはアプリと共に発行フォルダーにコピーされます。
利点
.NET バージョンの制御
アプリで展開する .NET のバージョンを制御します。プラットフォーム固有のターゲット設定
プラットフォームごとにアプリを発行する必要があるため、アプリの実行場所がわかります。 .NET で新しいプラットフォームが導入された場合、そのプラットフォームを対象とするバージョンをリリースするまで、ユーザーはそのプラットフォームでアプリを実行できません。 ユーザーが新しいプラットフォームでアプリを実行する前に、アプリの互換性の問題をテストできます。
欠点
大規模なデプロイ
アプリには .NET ランタイムとすべてのアプリの依存関係が含まれているため、必要なダウンロード サイズとハード ドライブの領域は、フレームワークに依存する バージョンよりも大きくなります。ヒント
.NET グローバリゼーション インバリアント モードを使用すると、Linux システムでのデプロイのサイズを約 28 MB 削減できます。 これにより、アプリは、インバリアント カルチャのようにすべてのカルチャを処理するように強制されます。
ヒント
IL のトリミングにより、デプロイのサイズをさらに小さくすることができます。
.NET バージョンの更新が困難
.NET ランタイム (アプリと共に配布) は、アプリの新しいバージョンをリリースすることによってのみアップグレードできます。
使用例
アプリを自己完結型としてデプロイします。 macOS 64 ビット実行可能ファイルが作成されます。
dotnet publish -r osx-x64 --self-contained
自己完結型のアプリを公開します。 Windows 64 ビット実行可能ファイルが作成されます。
dotnet publish -r win-x64 --self-contained
ReadyToRun イメージを使用して発行する
ReadyToRun イメージを使用して発行すると、アプリケーションのサイズを大きくする代償で、アプリケーションの起動時間が短縮されます。 詳細については、「ReadyToRun
利点
- 起動時間の向上
アプリケーションが JIT の実行に費やす時間が少なくなります。
欠点
- 大きいサイズの
アプリケーションはディスク上で大きくなります。
使用例
アプリを自己完結型およびReadyToRunとして発行します。 macOS 64 ビット実行可能ファイルが作成されます。
dotnet publish -c Release -r osx-x64 --self-contained -p:PublishReadyToRun=true
アプリを自己完結型で、かつ ReadyToRun 形式として発行します。 Windows 64 ビット実行可能ファイルが作成されます。
dotnet publish -c Release -r win-x64 --self-contained -p:PublishReadyToRun=true
関連項目
.NET