CLI を使用して .NET Core アプリを公開するPublish .NET Core apps with the CLI

この記事では、コマンド ラインから .NET Core アプリケーションを公開する方法を示します。This article demonstrates how you can publish your .NET Core application from the command line. .NET Core では、アプリケーションを公開する方法が 3 つ用意されています。.NET Core provides three ways to publish your applications. フレームワークに依存する展開では、ローカル環境にインストールされている .NET Core ランタイムを使用するクロス プラットフォームの .dll ファイルが生成されます。Framework-dependent deployment produces a cross-platform .dll file that uses the locally installed .NET Core runtime. フレームワークに依存する実行可能ファイルでは、ローカル環境にインストールされている .NET Core ランタイムを使用するプラットフォーム固有の実行可能ファイルが生成されます。Framework-dependent executable produces a platform-specific executable that uses the locally installed .NET Core runtime. 自己完結型の実行可能ファイルでは、プラットフォーム固有の実行可能ファイルが生成されて、.NET Core ランタイムのローカル コピーが組み込まれます。Self-contained executable produces a platform-specific executable and includes a local copy of the .NET Core runtime.

これらの公開モードの概要については、「.NET Core アプリケーションの展開」をご覧ください。For an overview of these publishing modes, see .NET Core Application Deployment.

CLI の使用方法について簡単にわかるヘルプをお探しですか。Looking for some quick help on using the CLI? 次の表では、アプリの公開方法についての例を示します。The following table shows some examples of how to publish your app. ターゲット フレームワークは、-f <TFM> パラメーターを使用するか、プロジェクト ファイルを編集して、指定することができます。You can specify the target framework with the -f <TFM> parameter or by editing the project file. 詳細については、「公開の基礎」をご覧ください。For more information, see Publishing basics.

公開モードPublish Mode SDK のバージョンSDK Version コマンドCommand
フレームワークに依存する展開Framework-dependent deployment 2.x2.x dotnet publish -c Release
フレームワークに依存する実行可能ファイルFramework-dependent executable 2.22.2 dotnet publish -c Release -r <RID> --self-contained false
3.03.0 dotnet publish -c Release -r <RID> --self-contained false
3.0*3.0* dotnet publish -c Release
自己完結型の展開Self-contained deployment 2.12.1 dotnet publish -c Release -r <RID> --self-contained true
2.22.2 dotnet publish -c Release -r <RID> --self-contained true
3.03.0 dotnet publish -c Release -r <RID> --self-contained true

* SDK バージョン 3.0 を使用する場合、基本的な dotnet publish コマンドを実行するときは、フレームワークに依存する実行可能ファイルが既定の公開モードです。* When using SDK version 3.0, framework-dependent executable is the default publishing mode when running the basic dotnet publish command. これは、プロジェクトのターゲットが .NET Core 2.1 または .NET Core 3.0 である場合にのみ適用されます。This only applies when the project targets either .NET Core 2.1 or .NET Core 3.0.

公開の基礎Publishing basics

アプリを公開するときは、プロジェクト ファイルの設定 <TargetFramework> で既定のターゲット フレームワークを指定します。The <TargetFramework> setting of the project file specifies the default target framework when you publish your app. 任意の有効なターゲット フレームワーク モニカー (TFM) にターゲット フレームワークを変更できます。You can change the target framework to any valid Target Framework Moniker (TFM). たとえば、プロジェクトで <TargetFramework>netcoreapp2.2</TargetFramework> を使用している場合は、.NET Core 2.2 をターゲットとするバイナリが作成されます。For example, if your project uses <TargetFramework>netcoreapp2.2</TargetFramework>, a binary that targets .NET Core 2.2 is created. この設定で指定されている TFM が、dotnet publish コマンドで使用される既定のターゲットになります。The TFM specified in this setting is the default target used by the dotnet publish command.

複数のフレームワークをターゲットにしたい場合は、セミコロンで区切ることにより設定 <TargetFrameworks> で複数の TFM 値を設定できます。If you want to target more than one framework, you can set the <TargetFrameworks> setting to more than one TFM value separated by a semicolon. dotnet publish -f <TFM> コマンドではフレームワークの 1 つを公開できます。You can publish one of the frameworks with the dotnet publish -f <TFM> command. たとえば、<TargetFrameworks>netcoreapp2.1;netcoreapp2.2</TargetFrameworks> と設定して dotnet publish -f netcoreapp2.1 を実行すると、.NET Core 2.1 をターゲットとするバイナリが作成されます。For example, if you have <TargetFrameworks>netcoreapp2.1;netcoreapp2.2</TargetFrameworks> and run dotnet publish -f netcoreapp2.1, a binary that targets .NET Core 2.1 is created.

他の値を設定しない限り、dotnet publish コマンドの出力ディレクトリは ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ です。Unless otherwise set, the output directory of the dotnet publish command is ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. -c パラメーターで変更しない限り、BUILD-CONFIGURATION の既定のモードは Debug です。The default BUILD-CONFIGURATION mode is Debug unless changed with the -c parameter. たとえば、dotnet publish -c Release -f netcoreapp2.1 と指定すると、myfolder/bin/Release/netcoreapp2.1/publish/ に公開されます。For example, dotnet publish -c Release -f netcoreapp2.1 publishes to myfolder/bin/Release/netcoreapp2.1/publish/.

.NET Core SDK 3.0 を使用する場合、.NET Core バージョン 2.1、2.2、または 3.0 をターゲットとするアプリの既定の公開モードは、フレームワークに依存する実行可能ファイルです。If you use .NET Core SDK 3.0, the default publish mode for apps that target .NET Core versions 2.1, 2.2, or 3.0 is framework-dependent executable.

.NET Core SDK 2.1 を使用する場合、.NET Core バージョン 2.1 または 2.2 をターゲットとするアプリの既定の公開モードは、フレームワークに依存する展開です。If you use .NET Core SDK 2.1, the default publish mode for apps that target .NET Core versions 2.1, 2.2 is framework-dependent deployment.

ネイティブの依存関係Native dependencies

アプリにネイティブの依存関係がある場合、別のオペレーティング システムではアプリが実行されない可能性があります。If your app has native dependencies, it may not run on a different operating system. たとえば、ネイティブの Windows API を使用しているアプリは、macOS または Linux では実行されません。For example, if your app uses the native Windows API, it won't run on macOS or Linux. プラットフォーム固有のコードを提供し、プラットフォームごとに実行可能ファイルをコンパイルする必要があります。You would need to provide platform-specific code and compile an executable for each platform.

また、参照しているライブラリにネイティブの依存関係がある場合、すべてのプラットフォームではアプリを実行できない可能性があることも考慮してください。Consider also, if a library you referenced has a native dependency, your app may not run on every platform. ただし、参照している NuGet パッケージには、必要なネイティブの依存関係を処理するためにプラットフォーム固有のバージョンが含まれている可能性があります。However, it's possible a NuGet package you're referencing has included platform-specific versions to handle the required native dependencies for you.

ネイティブの依存関係があるアプリを配布するときは、dotnet publish -r <RID> スイッチを使用して、公開対象のターゲット プラットフォームを指定することが必要な場合があります。When distributing an app with native dependencies, you may need to use the dotnet publish -r <RID> switch to specify the target platform you want to publish for. ランタイム識別子の一覧については、ランタイム識別子 (RID) のカタログに関する記事をご覧ください。For a list of runtime identifiers, see Runtime Identifier (RID) catalog.

プラットフォーム固有のバイナリの詳細については、「フレームワークに依存する実行可能ファイル」および「自己完結型の展開」セクションをご覧ください。More information about platform-specific binaries is covered in the Framework-dependent executable and Self-contained deployment sections.

サンプル アプリSample app

次のいずれかのアプリを使用して、公開コマンドを確認できます。You can use either the following app to explore the publishing commands. ターミナルで次のコマンドを実行すると、アプリが作成されます。The app is created by running the following commands in your terminal:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

コンソール テンプレートによって生成される Program.cs または Program.vb ファイルを、次のように変更する必要があります。The Program.cs or Program.vb file that is generated by the console template needs to be changed to the following:

using System;

namespace apptest1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
        }
    }
}
Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
    End Sub
End Module

アプリを実行すると (dotnet run)、次の出力が表示されます。When you run the app (dotnet run), the following output is displayed:

  _   _      _ _         __        __         _     _ _
 | | | | ___| | | ___    \ \      / /__  _ __| | __| | |
 | |_| |/ _ \ | |/ _ \    \ \ /\ / / _ \| '__| |/ _` | |
 |  _  |  __/ | | (_) |    \ V  V / (_) | |  | | (_| |_|
 |_| |_|\___|_|_|\___( )    \_/\_/ \___/|_|  |_|\__,_(_)
                     |/

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

.NET Core SDK 2.x の CLI では、フレームワークに依存する展開 (FDD) が、基本的な dotnet publish コマンドの既定のモードです。For the .NET Core SDK 2.x CLI, framework-dependent deployment (FDD) is the default mode for the basic dotnet publish command.

FDD としてアプリを公開すると、./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ フォルダーに<PROJECT-NAME>.dll ファイルが作成されます。When you publish your app as an FDD, a <PROJECT-NAME>.dll file is created in the ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ folder. アプリを実行するには、出力フォルダーに移動して、dotnet <PROJECT-NAME>.dll コマンドを使用します。To run your app, navigate to the output folder and use the dotnet <PROJECT-NAME>.dll command.

アプリは、特定のバージョンの .NET Core をターゲットにするように構成されます。Your app is configured to target a specific version of .NET Core. アプリを実行するコンピューターには、そのターゲットの .NET Core ランタイムが存在する必要があります。That targeted .NET Core runtime is required to be on the machine where you want to run your app. たとえば、アプリのターゲットが .NET Core 2.2 である場合、アプリを実行するコンピューターには、.NET Core 2.2 ランタイムがインストールされている必要があります。For example, if your app targets .NET Core 2.2, any machine that your app runs on must have the .NET Core 2.2 runtime installed. 公開の基礎」セクションで説明したように、プロジェクト ファイルを編集することで、既定のターゲット フレームワークを変更したり、複数のフレームワークをターゲットにしたりできます。As stated in the Publishing basics section, you can edit your project file to change the default target framework or to target more than one framework.

FDD の公開では、アプリが実行されるシステムで使用できる最新の .NET Core セキュリティ更新プログラムまで自動的にロールフォワードするアプリが作成されます。Publishing an FDD creates an app that automatically rolls-forward to the latest .NET Core security patch available on the system that runs the app. コンパイル時のバージョンのバインドの詳細については、「使用する .NET Core のバージョンを選択する」をご覧ください。For more information on version binding at compile time, see Select the .NET Core version to use.

フレームワークに依存する実行可能ファイルFramework-dependent executable

.NET Core SDK 3.x の CLI では、フレームワークに依存する実行可能ファイル (FDE) が、基本的な dotnet publish コマンドの既定のモードです。For the .NET Core SDK 3.x CLI, framework-dependent executable (FDE) the default mode for the basic dotnet publish command. 現在のオペレーティング システムをターゲットにする限り、他のパラメーターを指定する必要はありません。You don't need to specify any other parameters as long as you want to target the current operating system.

このモードでは、クロスプラットフォーム アプリをホストするために、プラットフォームに固有の実行可能なホストが作成されます。In this mode, a platform-specific executable host is created to host your cross-platform app. FDD では dotnet コマンドの形式でホストを要求するので、このモードは FDD と似ています。This mode is similar to FDD as FDD requires a host in the form of the dotnet command. ホストの実行可能ファイル名はプラットフォームごとに異なり、<PROJECT-FILE>.exe のような名前になります。The host executable filename varies per platform, and is named something similar to <PROJECT-FILE>.exe. この実行可能ファイルを直接実行することができ、dotnet <PROJECT-FILE>.dll を呼び出す代わりに使用できますが、このコマンドもアプリの実行手段として同じように使用できます。You can run this executable directly instead of calling dotnet <PROJECT-FILE>.dll which is still an acceptable way to run the app.

アプリは、特定のバージョンの .NET Core をターゲットにするように構成されます。Your app is configured to target a specific version of .NET Core. アプリを実行するコンピューターには、そのターゲットの .NET Core ランタイムが存在する必要があります。That targeted .NET Core runtime is required to be on the machine where you want to run your app. たとえば、アプリのターゲットが .NET Core 2.2 である場合、アプリを実行するコンピューターには、.NET Core 2.2 ランタイムがインストールされている必要があります。For example, if your app targets .NET Core 2.2, any machine that your app runs on must have the .NET Core 2.2 runtime installed. 公開の基礎」セクションで説明したように、プロジェクト ファイルを編集することで、既定のターゲット フレームワークを変更したり、複数のフレームワークをターゲットにしたりできます。As stated in the Publishing basics section, you can edit your project file to change the default target framework or to target more than one framework.

FDE の公開では、アプリが実行されるシステムで使用できる最新の .NET Core セキュリティ更新プログラムまで自動的にロールフォワードするアプリが作成されます。Publishing an FDE creates an app that automatically rolls-forward to the latest .NET Core security patch available on the system that runs the app. コンパイル時のバージョンのバインドの詳細については、「使用する .NET Core のバージョンを選択する」をご覧ください。For more information on version binding at compile time, see Select the .NET Core version to use.

dotnet publish コマンドで次のスイッチを使用して、FDE を公開する必要があります (現在のプラットフォームをターゲットにするときの .NET Core 3.x を除きます)。You must (except for .NET Core 3.x when you target the current platform) use the following switches with the dotnet publish command to publish an FDE:

  • -r <RID> このスイッチでは、識別子 (RID) を使用してターゲット プラットフォームを指定します。This switch uses an identifier (RID) to specify the target platform. ランタイム識別子の一覧については、ランタイム識別子 (RID) のカタログに関する記事をご覧ください。For a list of runtime identifiers, see Runtime Identifier (RID) catalog.

  • --self-contained false このスイッチでは、識別子 (RID) を使用してターゲット プラットフォームを指定します。--self-contained false This switch tells the .NET Core SDK to create an executable as an FDE.

-r スイッチを使用すると常に、出力フォルダーが次のパスに変わります: Whenever you use the -r switch, the output folder path changes to: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

アプリの例を使用する場合は、dotnet publish -f netcoreapp2.2 -r win10-x64 --self-contained false を実行します。If you use the example app, run dotnet publish -f netcoreapp2.2 -r win10-x64 --self-contained false. このコマンドでは、次の実行可能ファイルが作成されます: This command creates the following executable: ./bin/Debug/netcoreapp2.2/win10-x64/publish/apptest1.exe

注意

グローバリゼーション インバリアント モードを有効にすることで、展開の合計サイズを小さくすることができます。You can reduce the total size of your deployment by enabling globalization invariant mode. このモードは、全世界を意識するものではなく、インバリアント カルチャの書式設定規則、大文字/小文字の区別規則、文字列比較、並べ替え順序を使用できるアプリケーションにとって便利です。This mode is useful for applications that are not globally aware and that can use the formatting conventions, casing conventions, and string comparison and sort order of the invariant culture. グローバリゼーション インバリアント モードの詳細と、それを有効にする方法については、「.NET Core Globalization Invariant Mode」(.NET Core のグローバリゼーション インバリアント モード) をご覧くださいFor more information about globalization invariant mode and how to enable it, see .NET Core Globalization Invariant Mode

自己完結型の展開Self-contained deployment

自己完結型の展開 (SCD) を公開すると、.NET Core SDK によってプラットフォーム固有の実行可能ファイルが作成されます。When you publish a self-contained deployment (SCD), the .NET Core SDK creates a platform-specific executable. SCD の公開には、アプリの実行に必要なすべての .NET Core ファイルが含まれますが、.NET Core のネイティブの依存関係は含まれません。Publishing an SCD includes all required .NET Core files to run your app but it doesn't include the native dependencies of .NET Core. これらの依存関係は、アプリを実行する前に、システムに存在している必要があります。These dependencies must be present on the system before the app runs.

SCD の公開で作成されるアプリでは、使用可能な最新の .NET Core セキュリティ更新プログラムへのロールフォワードは行われません。Publishing an SCD creates an app that doesn't roll-forward to the latest available .NET Core security patch. コンパイル時のバージョンのバインドの詳細については、「使用する .NET Core のバージョンを選択する」をご覧ください。For more information on version binding at compile time, see Select the .NET Core version to use.

dotnet publish コマンドで次のスイッチを使用して、SCD を公開する必要があります。You must use the following switches with the dotnet publish command to publish an SCD:

  • -r <RID> このスイッチでは、識別子 (RID) を使用してターゲット プラットフォームを指定します。This switch uses an identifier (RID) to specify the target platform. ランタイム識別子の一覧については、ランタイム識別子 (RID) のカタログに関する記事をご覧ください。For a list of runtime identifiers, see Runtime Identifier (RID) catalog.

  • --self-contained true このスイッチでは、SCD として実行可能ファイルを作成するよう .NET Core SDK に指示されます。--self-contained true This switch tells the .NET Core SDK to create an executable as an SCD.

注意

グローバリゼーション インバリアント モードを有効にすることで、展開の合計サイズを小さくすることができます。You can reduce the total size of your deployment by enabling globalization invariant mode. このモードは、全世界を意識するものではなく、インバリアント カルチャの書式設定規則、大文字/小文字の区別規則、文字列比較、並べ替え順序を使用できるアプリケーションにとって便利です。This mode is useful for applications that are not globally aware and that can use the formatting conventions, casing conventions, and string comparison and sort order of the invariant culture. グローバリゼーション インバリアント モードの詳細と、それを有効にする方法については、「.NET Core Globalization Invariant Mode」(.NET Core のグローバリゼーション インバリアント モード) をご覧くださいFor more information about globalization invariant mode and how to enable it, see .NET Core Globalization Invariant Mode

関連項目See also