.NET Core アプリケーションの発行の概要.NET Core application publishing overview

.NET Core を使用して作成したアプリケーションは、2 つの異なるモードで発行できます。モードは、お客様のアプリをユーザーが実行する方法に影響します。Applications you create with .NET Core can be published in two different modes, and the mode affects how a user runs your app.

ご自分のアプリを "自己完結型" として発行すると、.NET Core ランタイムとライブラリ、さらにご自分のアプリケーションとその依存関係を含むアプリケーションが生成されます。Publishing your app as self-contained produces an application that includes the .NET Core runtime and libraries, and your application and its dependencies. そのアプリケーションのユーザーは、.NET Core ランタイムがインストールされていないコンピューター上でそれを実行することができます。Users of the application can run it on a machine that doesn't have the .NET Core runtime installed.

ご自分のアプリを "ランタイム依存" (旧称 フレームワーク依存) として発行すると、ご自分のアプリケーション自体とその依存関係のみを含むアプリケーションが生成されます。Publishing your app as runtime-dependent (previously known as framework-dependent) produces an application that includes only your application itself and its dependencies. そのアプリケーションのユーザーは、.NET Core ランタイムを個別にインストールする必要があります。Users of the application have to separately install the .NET Core runtime.

どちらの発行モードでも、既定ではプラットフォーム固有の実行可能ファイルが生成されます。Both publishing modes produce a platform-specific executable by default. ランタイム依存のアプリケーションは、実行可能ファイルなしで作成できます。これらのアプリケーションは、クロスプラットフォームです。Runtime-dependent applications can be created without an executable, and these applications are cross-platform.

実行可能ファイルが生成されるときに、ランタイム識別子 (RID) を使用してターゲット プラットフォームを指定できます。When an executable is produced, you can specify the target platform with a runtime identifier (RID). RID の詳細については、「.NET Core の RID カタログ」を参照してください。For more information about RIDs, see .NET Core RID Catalog.

次の表に、SDK のバージョンごとに、アプリをランタイム依存として、または自己完結型として発行するために使用するコマンドをまとめます。The following table outlines the commands used to publish an app as runtime-dependent or self-contained, per SDK version:

種類Type SDK 2.1SDK 2.1 SDK 3.xSDK 3.x コマンドCommand
現在のプラットフォーム用のランタイム依存の実行可能ファイルruntime-dependent executable for the current platform. ✔️✔️ dotnet publish
特定のプラットフォーム用のランタイム依存の実行可能ファイルruntime-dependent executable for a specific platform. ✔️✔️ dotnet publish -r <RID> --self-contained false
ランタイム依存のクロスプラットフォーム バイナリruntime-dependent cross-platform binary. ✔️✔️ ✔️✔️ dotnet publish
自己完結型の実行可能ファイルself-contained executable. ✔️✔️ ✔️✔️ dotnet publish -r <RID>

詳細については、.NET Core dotnet publish コマンドに関するページを参照してください。For more information, see .NET Core dotnet publish command.

実行可能ファイルを生成するProduce an executable

実行可能ファイルはクロスプラットフォームではありません。Executables aren't cross-platform. これは、オペレーティング システムおよび CPU アーキテクチャに固有のものです。They're specific to an operating system and CPU architecture. ご自分のアプリを発行して実行可能ファイルを作成するとき、アプリを自己完結型またはランタイム依存として発行することができます。When publishing your app and creating an executable, you can publish the app as self-contained or runtime-dependent. アプリを自己完結型として発行すると、そのアプリに .NET Core ランタイムが含められます。アプリのユーザーはアプリを実行する前に .NET Core のインストールについて心配する必要はありません。Publishing an app as self-contained includes the .NET Core runtime with the app, and users of the app don't have to worry about installing .NET Core before running the app. ランタイム依存として発行されたアプリには、.NET Core ランタイムとライブラリは含められません。アプリとサードパーティの依存関係のみが含められます。Apps published as runtime-dependent don't include the .NET Core runtime and libraries; only the app and 3rd-party dependencies are included.

次のコマンドを実行すると、実行可能ファイルが生成されます。The following commands produce an executable:

種類Type SDK 2.1SDK 2.1 SDK 3.xSDK 3.x コマンドCommand
現在のプラットフォーム用のランタイム依存の実行可能ファイルruntime-dependent executable for the current platform. ✔️✔️ dotnet publish
特定のプラットフォーム用のランタイム依存の実行可能ファイルruntime-dependent executable for a specific platform. ✔️✔️ dotnet publish -r <RID> --self-contained false
自己完結型の実行可能ファイルself-contained executable. ✔️✔️ ✔️✔️ dotnet publish -r <RID>

クロスプラットフォーム バイナリを生成するProduce a cross-platform binary

ご自分のアプリを dll ファイルの形式で ランタイム依存として発行すると、クロスプラットフォーム バイナリが作成されます。Cross-platform binaries are created when you publish your app as runtime-dependent, in the form of a dll file. dll ファイルには、プロジェクトに基づいて名前が付けられます。The dll file is named after your project. たとえば、word_reader という名前のアプリがある場合、word_reader.dll という名前のファイルが作成されます。For example, if you have an app named word_reader, a file named word_reader.dll is created. この方法で発行されたアプリは、dotnet <filename.dll> コマンドを使用して実行され、任意のプラットフォームで実行できます。Apps published in this way are run with the dotnet <filename.dll> command and can be run on any platform.

ターゲットとなる .NET Core ランタイムが既にインストールされていれば、クロスプラットフォーム バイナリを任意のオペレーティング システムで実行できます。Cross-platform binaries can be run on any operating system as long as the targeted .NET Core runtime is already installed. ターゲットとなる .NET Core ランタイムがインストールされていない場合、アプリがロール フォワードするように構成されていれば、より新しいランタイムを使用してアプリを実行することができます。If the targeted .NET Core runtime isn't installed, the app may run using a newer runtime if the app is configured to roll-forward. 詳細については、ランタイム依存のアプリのロールフォワードに関するページを参照してください。For more information, see runtime-dependent apps roll forward.

次のコマンドでは、クロスプラットフォーム バイナリが生成されます。The following command produces a cross-platform binary:

種類Type SDK 2.1SDK 2.1 SDK 3.xSDK 3.x コマンドCommand
ランタイム依存のクロスプラットフォーム バイナリruntime-dependent cross-platform binary. ✔️✔️ ✔️✔️ dotnet publish

ランタイム依存の発行Publish runtime-dependent

ランタイム依存として発行されたアプリはクロスプラットフォームであり、.NET Core ランタイムは含まれていません。Apps published as runtime-dependent are cross-platform and don't include the .NET Core runtime. アプリのユーザーは、.NET Core ランタイムをインストールする必要があります。The user of your app is required to install the .NET Core runtime.

アプリをランタイム依存として発行すると、クロスプラットフォーム バイナリdll ファイルとして生成されるほか、現在ご利用のプラットフォームをターゲットとするプラットフォーム固有の実行可能ファイルが生成されます。Publishing an app as runtime-dependent produces a cross-platform binary as a dll file, and a platform-specific executable that targets your current platform. dll はクロスプラットフォームですが、実行可能ファイルはそうではありません。The dll is cross-platform while the executable isn't. たとえば、word_reader という名前のアプリを発行し、Windows をターゲットとすると、word_reader.exe 実行可能ファイルが word_reader.dll と共に作成されます。For example, if you publish an app named word_reader and target Windows, a word_reader.exe executable is created along with word_reader.dll. Linux または macOS をターゲットとすると、word_reader 実行可能ファイルが word_reader.dll と共に作成されます。When targeting Linux or macOS, a word_reader executable is created along with word_reader.dll. RID の詳細については、「.NET Core の RID カタログ」を参照してください。For more information about RIDs, see .NET Core RID Catalog.

重要

.NET Core SDK 2.1 では、アプリをランタイム依存として発行しても、プラットフォーム固有の実行可能ファイルは生成されません。.NET Core SDK 2.1 doesn't produce platform-specific executables when you publish an app runtime-dependent.

アプリのクロスプラットフォーム バイナリは、dotnet <filename.dll> コマンドを使用して実行でき、任意のプラットフォームで実行できます。The cross-platform binary of your app can be run with the dotnet <filename.dll> command, and can be run on any platform. プラットフォーム固有の実装を含む NuGet パッケージがアプリで使用される場合、すべてのプラットフォームの依存関係が、アプリと共に publish フォルダーにコピーされます。If the app uses a NuGet package that has platform-specific implementations, all platforms' dependencies are copied to the publish folder along with the app.

特定のプラットフォーム用の実行可能ファイルを作成するには、-r <RID> --self-contained false パラメーターを dotnet publish コマンドに渡します。You can create an executable for a specific platform by passing the -r <RID> --self-contained false parameters to the dotnet publish command. -r パラメーターを省略すると、現在のプラットフォーム用の実行可能ファイルが作成されます。When the -r parameter is omitted, an executable is created for your current platform. ターゲットとするプラットフォーム用のプラットフォーム固有の依存関係が含まれている NuGet パッケージはいずれも、publish フォルダーにコピーされます。Any NuGet packages that have platform-specific dependencies for the targeted platform are copied to the publish folder.

長所Advantages

  • 小規模な展開Small deployment
    ご自分のアプリとその依存関係のみが配布されます。Only your app and its dependencies are distributed. .NET Core ランタイムとライブラリはユーザーによってインストールされ、そのランタイムはすべてのアプリで共有されます。The .NET Core runtime and libraries are installed by the user and all apps share the runtime.

  • クロスプラットフォームCross-platform
    ご自分のアプリと任意の NET ベースのライブラリは、他のオペレーティング システムでも実行されます。Your app and any .NET-based library runs on other operating systems. ご自分のアプリに対してターゲット プラットフォームを定義する必要はありません。You don't need to define a target platform for your app. .NET ファイル形式の詳細については、「.NET アセンブリ ファイルの形式」を参照してください。For information about the .NET file format, see .NET Assembly File Format.

  • パッチが適用された最新のランタイムを使用するUses the latest patched runtime
    アプリでは、ターゲット システムにインストールされている最新のランタイム (.NET Core のターゲットとなる major-minor ファミリ内の) が使用されます。The app uses the latest runtime (within the targeted major-minor family of .NET Core) installed on the target system. これは、パッチが適用された最新バージョンの .NET Core ランタイムが自動的に使用されることを意味します。This means your app automatically uses the latest patched version of the .NET Core runtime. この既定の動作はオーバーライドできます。This default behavior can be overridden. 詳細については、ランタイム依存のアプリのロールフォワードに関するページを参照してください。For more information, see runtime-dependent apps roll forward.

短所Disadvantages

  • ランタイムを事前にインストールする必要があるRequires pre-installing the runtime
    ご自分のアプリを実行できるのは、このアプリでターゲットとされる .NET Core のバージョンがホスト システムに既にインストールされている場合のみです。Your app can run only if the version of .NET Core your app targets is already installed on the host system. アプリで特定のバージョンの .NET Core が必要とされる場合、または新しいバージョンの .NET Core が許可される場合は、アプリのロール フォワード動作を構成することができます。You can configure roll-forward behavior for the app to either require a specific version of .NET Core or allow a newer version of .NET Core. 詳細については、ランタイム依存のアプリのロールフォワードに関するページを参照してください。For more information, see runtime-dependent apps roll forward.

  • .NET Core が変更される可能性がある.NET Core may change
    .NET Core ランタイムとライブラリは、アプリが実行されているコンピューター上で更新される可能性があります。It's possible for the .NET Core runtime and libraries to be updated on the machine where the app is run. まれなケースとして、それにより、ほとんどのアプリで使用されている .NET Core ライブラリを使用すると、ご自分のアプリの動作が変わる場合があります。In rare cases, this may change the behavior of your app if you use the .NET Core libraries, which most apps do. より新しいバージョンの .NET Core をご自分のアプリで使用する方法を構成できます。You can configure how your app uses newer versions of .NET Core. 詳細については、ランタイム依存のアプリのロールフォワードに関するページを参照してください。For more information, see runtime-dependent apps roll forward.

次の欠点は、.NET Core 2.1 SDK にのみ適用されます。The following disadvantage only applies to .NET Core 2.1 SDK.

  • dotnet コマンドを使用してアプリを起動するUse the dotnet command to start the app
    お客様のアプリを起動するために、ユーザーは dotnet <filename.dll> コマンドを実行する必要があります。Users must run the dotnet <filename.dll> command to start your app. .NET Core 2.1 SDK では、アプリがランタイム依存として発行される場合、プラットフォーム固有の実行可能ファイルは生成されません。.NET Core 2.1 SDK doesn't produce platform-specific executables for apps published runtime-dependent.

使用例Examples

アプリをクロスプラットフォーム ランタイム依存として発行します。Publish an app cross-platform runtime-dependent. 現在ご利用のプラットフォームをターゲットとする実行可能ファイルが dll ファイルと共に作成されます。An executable that targets your current platform is created along with the dll file.

dotnet publish

アプリをクロスプラットフォーム ランタイム依存として発行します。Publish an app cross-platform runtime-dependent. Linux 64 ビットの実行可能ファイルが dll ファイルと共に作成されます。A Linux 64-bit executable is created along with the dll file. このコマンドは .NET Core SDK 2.1 では機能しません。This command doesn't work with .NET Core SDK 2.1.

dotnet publish -r linux-x64 --self-contained false

自己完結型の発行Publish self-contained

自己完結型としてご自分のアプリを発行すると、プラットフォーム固有の実行可能ファイルが生成されます。Publishing your app as self-contained produces a platform-specific executable. output publishing フォルダーには、.NET Core ライブラリやターゲット ランタイムなど、アプリのすべてのコンポーネントが格納されます。The output publishing folder contains all components of the app, including the .NET Core libraries and target runtime. このアプリは他の .NET Core アプリから分離されていて、ローカルにインストールされた共有ランタイムを使用しません。The app is isolated from other .NET Core apps and doesn't use a locally installed shared runtime. お客様のアプリのユーザーは、.NET Core のダウンロードもインストールも行う必要がありません。The user of your app isn't required to download and install .NET Core.

指定したターゲット プラットフォームに対して実行可能バイナリが生成されます。The executable binary is produced for the specified target platform. たとえば、word_reader という名前のアプリを持っていて、Windows 用に自己完結型の実行可能ファイルを発行する場合、word_reader.exe ファイルが作成されます。For example, if you have an app named word_reader, and you publish a self-contained executable for Windows, a word_reader.exe file is created. Linux または macOS 用に発行する場合は、word_reader ファイルが作成されます。Publishing for Linux or macOS, a word_reader file is created. ターゲットのプラットフォームおよびアーキテクチャは、dotnet publish コマンドの -r <RID> パラメーターを使用して指定します。The target platform and architecture is specified with the -r <RID> parameter for the dotnet publish command. RID の詳細については、「.NET Core の RID カタログ」を参照してください。For more information about RIDs, see .NET Core RID Catalog.

プラットフォーム固有の依存関係を含む NuGet パッケージなど、プラットフォーム固有の依存関係がアプリにある場合、それらはアプリと共に publish フォルダーにコピーされます。If the app has platform-specific dependencies, such as a NuGet package containing platform-specific dependencies, these are copied to the publish folder along with the app.

長所Advantages

  • .NET Core バージョンの制御Control .NET Core version
    ご自分のアプリと共に展開する .NET Core のバージョンを制御できます。You control which version of .NET Core is deployed with your app.

  • プラットフォーム固有のターゲット設定Platform-specific targeting
    プラットフォームごとにご自分のアプリを発行する必要があるため、アプリが実行される場所を把握できます。Because you have to publish your app for each platform, you know where your app will run. .NET Core に新しいプラットフォームが導入された場合、そのプラットフォームをターゲットとするバージョンをお客様がリリースするまで、ユーザーはそのプラットフォームでお客様のアプリを実行できません。If .NET Core introduces a new platform, users can't run your app on that platform until you release a version targeting that platform. ユーザーが新しいプラットフォームでアプリを実行する前に、アプリに互換性の問題がないかテストできます。You can test your app for compatibility problems before your users run your app on the new platform.

短所Disadvantages

  • 大規模な展開Larger deployments
    アプリには .NET Core ランタイムとアプリのすべての依存関係が含まれているため、必要とされるダウンロード サイズとハード ドライブの容量は ランタイム依存のバージョンよりも大きくなります。Because your app includes the .NET Core runtime and all of your app dependencies, the download size and hard drive space required is greater than a runtime-dependent version.

    ヒント

    .NET Core の "グローバリゼーション インバリアント モード" を使用することで、Linux システムでの展開のサイズを約 28 MB 小さくすることができます。You can reduce the size of your deployment on Linux systems by approximately 28 MB by using .NET Core globalization invariant mode. これにより、インバリアント カルチャのようなすべてのカルチャがアプリによって処理されるようになります。This forces your app to treat all cultures like the invariant culture.

  • .NET Core バージョンを更新するのが困難Harder to update the .NET Core version
    .NET Core ランタイム (ご自分のアプリと共に配布される) は、ご自分のアプリの新しいバージョンをリリースすることによってのみアップグレードできます。.NET Core Runtime (distributed with your app) can only be upgraded by releasing a new version of your app. .NET Core ランタイムへのセキュリティ パッチとして、ご自分のアプリケーションの更新バージョンを提供する責任があります。You're responsible for supplying an updated version of your application for security patches to the .NET Core Runtime.

使用例Examples

アプリを自己完結型として発行します。Publish an app self-contained. macOS 64 ビット実行可能ファイルが作成されます。A macOS 64-bit executable is created.

dotnet publish -r osx-x64

アプリを自己完結型として発行します。Publish an app self-contained. Windows 64 ビット実行可能ファイルが作成されます。A Windows 64-bit executable is created.

dotnet publish -r win-x64

関連項目See also