コマンド ライン インターフェイス (CLI) ツールを使用して .NET Core アプリを展開するDeploying .NET Core apps with command-line interface (CLI) tools

.NET Core アプリケーションは、アプリケーション バイナリは含むが対象のシステムに .NET Core バイナリが存在することに依存するフレームワークに依存する展開か、アプリケーションと .NET Core のバイナリの両方を含む自己完結型の配置のいずれかで展開できます。You can deploy a .NET Core application either as a framework-dependent deployment, which includes your application binaries but depends on the presence of .NET Core on the target system, or as a self-contained deployment, which includes both your application and the .NET Core binaries. 概要については、「.NET Core アプリケーション展開」を参照してください。For an overview, see .NET Core Application Deployment.

以降のセクションでは、次のような展開を作成するために .NET Core コマンド ライン インターフェイス ツールを使用する方法を説明します。The following sections show how to use .NET Core command-line interface tools to create the following kinds of deployments:

  • フレームワークに依存する展開Framework-dependent deployment
  • サードパーティの依存関係を含む、フレームワークに依存する展開Framework-dependent deployment with third-party dependencies
  • 自己完結型の展開Self-contained deployment
  • サードパーティの依存関係を含む、自己完結型の展開Self-contained deployment with third-party dependencies

コマンド ラインを使用する場合は、任意のプログラム エディターを使用できます。When working from the command line, you can use a program editor of your choice. プログラム エディターが Visual Studio Code の場合、[表示] > [統合ターミナル] を選択して、Visual Studio Code 環境内にコマンド コンソールを開くことができます。If your program editor is Visual Studio Code, you can open a command console inside your Visual Studio Code environment by selecting View > Integrated Terminal.

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

サードパーティの依存関係を含まない、フレームワークに依存する展開を展開するプロセスには、アプリのビルド、テスト、および発行が含まれます。Deploying a framework-dependent deployment with no third-party dependencies simply involves building, testing, and publishing the app. C# で記述された次の単純な例は、このプロセスを示しています。A simple example written in C# illustrates the process.

  1. プロジェクトのディレクトリを作成します。Create a project directory.

    プロジェクトのディレクトリを作成し、それを現在のディレクトリにします。Create a directory for your project and make it your current directory.

  2. プロジェクトを作成します。Create the project.

    コマンド ラインに dotnet new console と入力して、そのディレクトリに新しい C# コンソール プロジェクトを作成します。From the command line, type dotnet new console to create a new C# console project in that directory.

  3. アプリケーションのソース コードを追加します。Add the application's source code.

    エディターで Program.cs ファイルを開き、自動生成されたコードを次のコードに置き換えます。Open the Program.cs file in your editor and replace the auto-generated code with the following code. テキストの入力を求めるプロンプトが表示されてから、ユーザーが入力した個々の単語が表示されます。It prompts the user to enter text and displays the individual words entered by the user. 正規表現 \w+ を使用して、入力テキストの単語を分離します。It uses the regular expression \w+ to separate the words in the input text.

    using System;
    using System.Text.RegularExpressions;
    
    namespace Applications.ConsoleApps
    {
        public class ConsoleParser
        {
            public static void Main()
            {
                Console.WriteLine("Enter any text, followed by <Enter>:\n");
                String s = Console.ReadLine();
                ShowWords(s);
                Console.Write("\nPress any key to continue... ");
                Console.ReadKey();
            }
    
            private static void ShowWords(String s)
            {
                String pattern = @"\w+";
                var matches = Regex.Matches(s, pattern);
                if (matches.Count == 0)
                {
                    Console.WriteLine("\nNo words were identified in your input.");
                }
                else
                {
                    Console.WriteLine($"\nThere are {matches.Count} words in your string:");
                    for (int ctr = 0; ctr < matches.Count; ctr++)
                    {
                        Console.WriteLine($"   #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}");
                    }
                }
            }
        }
    }
    
    
  4. プロジェクトの依存関係とツールを更新します。Update the project's dependencies and tools.

    dotnet restore コマンドを実行して、プロジェクトで指定された依存関係を復元します (注記参照)。Run the dotnet restore (see note) command to restore the dependencies specified in your project.

  5. アプリのデバッグ ビルドを作成します。Create a Debug build of your app.

    dotnet build コマンドを使用すると、アプリケーションをビルドでき、dotnet run コマンドを使用すると、それをビルドして実行できます。Use the dotnet build command to build your application or the dotnet run command to build and run it.

  6. アプリを展開します。Deploy your app.

    プログラムをテストし、デバッグした後は、次のコマンドを使用して、展開を作成します。After you've debugged and tested the program, create the deployment by using the following command:

    dotnet publish -f netcoreapp1.1 -c Release
    

    これにより、リリース (デバッグではなく) バージョンのアプリが作成されます。This creates a Release (rather than a Debug) version of your app. 作成されたファイルは、プロジェクトの bin ディレクトリのサブディレクトリ内にある publish という名前のディレクトリに配置されます。The resulting files are placed in a directory named publish that's in a subdirectory of your project's bin directory.

アプリケーションのファイルと共に、発行プロセスは、アプリに関するデバッグ情報を含むプログラム データベース (.pdb) ファイルを出力します。Along with your application's files, the publishing process emits a program database (.pdb) file that contains debugging information about your app. このファイルは、主に例外のデバッグに役立ちます。The file is useful primarily for debugging exceptions. これは、アプリケーションのファイルと一緒には配布しないよう選択できます。You can choose not to distribute it with your application's files. ただし、アプリのリリース ビルドをデバッグする場合のために、保存しておくことをお勧めします。You should, however, save it in the event that you want to debug the Release build of your app.

アプリケーション ファイルの完全なセットは、任意の方法で展開できます。You can deploy the complete set of application files in any way you like. たとえば、Zip ファイルにパッケージ化したり、単純な copy コマンドを使用したり、任意のインストール パッケージで展開したりできます。For example, you can package them in a Zip file, use a simple copy command, or deploy them with any installation package of your choice. 一度インストールすると、ユーザーは dotnet コマンドを使用して、dotnet fdd.dll などのアプリケーションのファイル名を入力してアプリケーションを実行できます。Once installed, users can execute your application by using the dotnet command and providing the application filename, such as dotnet fdd.dll.

また、アプリケーション インストールの一環として、インストーラーはアプリケーション バイナリに加えて、共有フレームワーク インストーラーをバンドルするか、または前提条件として共有フレームワークがあるか確認する必要があります。In addition to the application binaries, your installer should also either bundle the shared framework installer or check for it as a prerequisite as part of the application installation. 共有フレームワークをインストールするには、管理者またはルートの権限が必要です。Installation of the shared framework requires Administrator/root access.

サードパーティの依存関係を含む、フレームワークに依存する展開Framework-dependent deployment with third-party dependencies

1 つ以上のサードパーティの依存関係を備えたフレームワークに依存する展開を展開するには、それらの依存関係がプロジェクトで使用できる必要があります。Deploying a framework-dependent deployment with one or more third-party dependencies requires that those dependencies be available to your project. dotnet restore コマンドを実行する前に、次の 2 つの追加手順を実行する必要があります(注記参照)。Two additional steps are required before you can run the dotnet restore (see note) command:

  1. csproj ファイルの <ItemGroup> セクションに、必要なサードパーティ ライブラリへの参照を追加します。Add references to required third-party libraries to the <ItemGroup> section of your csproj file. 次の <ItemGroup> セクションには、サードパーティ ライブラリとして Json.NET への依存関係があります。The following <ItemGroup> section contains a dependency on Json.NET as a third-party library:

    <ItemGroup>
      <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
    </ItemGroup>
    
  2. サードパーティの依存関係を含む NuGet パッケージをまだダウンロードしていない場合は、ダウンロードします。If you haven't already, download the NuGet package containing the third-party dependency. パッケージをダウンロードするには、依存関係を追加した後で dotnet restore コマンドを実行します (注記参照)。To download the package, execute the dotnet restore (see note) command after adding the dependency. 発行時に依存関係はローカルの NuGet キャッシュからが解決されるので、システムで使用可能になる必要があります。Because the dependency is resolved out of the local NuGet cache at publish time, it must be available on your system.

サードパーティの依存関係を含む、フレームワークに依存する展開は、サードパーティの依存関係と同じ移植性を持つことに注意してください。Note that a framework-dependent deployment with third-party dependencies is only as portable as its third-party dependencies. たとえば、サードパーティ ライブラリが macOS のみをサポートする場合、そのアプリを Windows システムに移植することはできません。For example, if a third-party library only supports macOS, the app isn't portable to Windows systems. この状況は、サードパーティの依存関係自体がネイティブ コードに依存する場合に生じる可能性があります。This happens if the third-party dependency itself depends on native code. このよい例は、libuv に対してネイティブの依存関係が必要な Kestrel サーバーです。A good example of this is Kestrel server, which requires a native dependency on libuv. このようなサードパーティの依存関係を含むアプリケーションに対して FDD が作成されると、発行された出力には、ネイティブの依存関係がサポートする (そして、その NuGet パッケージ内に存在する) 各ランタイム識別子 (RID) のフォルダーが含まれます。When an FDD is created for an application with this kind of third-party dependency, the published output contains a folder for each Runtime Identifier (RID) that the native dependency supports (and that exists in its NuGet package).

サードパーティの依存関係を含まない、自己完結型の展開Self-contained deployment without third-party dependencies

サードパーティの依存関係を含まない自己完結型の展開を展開するプロセスには、プロジェクトの作成、csproj ファイルの変更、アプリのビルド、テスト、および発行が含まれます。Deploying a self-contained deployment without third-party dependencies involves creating the project, modifying the csproj file, building, testing, and publishing the app. C# で記述された次の単純な例は、このプロセスを示しています。A simple example written in C# illustrates the process. この例では、コマンド ラインから dotnet ユーティリティを使用して、自己完結型の展開を作成する方法を示します。The example shows how to create a self-contained deployment using the dotnet utility from the command line.

  1. プロジェクトのディレクトリを作成します。Create a directory for the project.

    プロジェクトのディレクトリを作成し、それを現在のディレクトリにします。Create a directory for your project, and make it your current directory.

  2. プロジェクトを作成します。Create the project.

    コマンド ラインに dotnet new console と入力して、そのディレクトリに新しい C# コンソール プロジェクトを作成します。From the command line, type dotnet new console to create a new C# console project in that directory.

  3. アプリケーションのソース コードを追加します。Add the application's source code.

    エディターで Program.cs ファイルを開き、自動生成されたコードを次のコードに置き換えます。Open the Program.cs file in your editor and replace the auto-generated code with the following code. テキストの入力を求めるプロンプトが表示されてから、ユーザーが入力した個々の単語が表示されます。It prompts the user to enter text and displays the individual words entered by the user. 正規表現 \w+ を使用して、入力テキストの単語を分離します。It uses the regular expression \w+ to separate the words in the input text.

    using System;
    using System.Text.RegularExpressions;
    
    namespace Applications.ConsoleApps
    {
        public class ConsoleParser
        {
            public static void Main()
            {
                Console.WriteLine("Enter any text, followed by <Enter>:\n");
                String s = Console.ReadLine();
                ShowWords(s);
                Console.Write("\nPress any key to continue... ");
                Console.ReadKey();
            }
    
            private static void ShowWords(String s)
            {
                String pattern = @"\w+";
                var matches = Regex.Matches(s, pattern);
                if (matches.Count == 0)
                {
                    Console.WriteLine("\nNo words were identified in your input.");
                }
                else
                {
                    Console.WriteLine($"\nThere are {matches.Count} words in your string:");
                    for (int ctr = 0; ctr < matches.Count; ctr++)
                    {
                        Console.WriteLine($"   #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}");
                    }
                }
            }
        }
    }
    
    
  4. アプリの対象プラットフォームを定義します。Define the platforms that your app will target.

    csproj ファイルで、アプリが対象とするプラットフォームを定義する <RuntimeIdentifiers> タグを <PropertyGroup> セクションに作成し、対象とする各プラットフォームのランタイム識別子 (RID) を指定します。Create a <RuntimeIdentifiers> tag in the <PropertyGroup> section of your csproj file that defines the platforms your app targets and specify the runtime identifier (RID) for each platform that you target. なお、RID の分離にはセミコロンを追加する必要があることに注意してください。Note that you also need to add a semicolon to separate the RIDs. ランタイム識別子の一覧については、「Runtime IDentifier catalog」 (ランタイム識別子のカタログ) を参照してください。See Runtime IDentifier catalog for a list of runtime identifiers.

    たとえば、次の <PropertyGroup> セクションは、アプリが 64 ビット Windows 10 オペレーティング システムおよび 64 ビット OS X バージョン 10.11 オペレーティング システムで実行されることを示します。For example, the following <PropertyGroup> section indicates that the app runs on 64-bit Windows 10 operating systems and the 64-bit OS X Version 10.11 operating system.

    <PropertyGroup>
        <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
    </PropertyGroup>
    

    <RuntimeIdentifiers> 要素は、csproj ファイルの任意の <PropertyGroup> に含めることができます。Note that the <RuntimeIdentifiers> element can appear in any <PropertyGroup> in your csproj file. csproj ファイルの完全なサンプルは、このセクションの後の部分で示しています。A complete sample csproj file appears later in this section.

  5. プロジェクトの依存関係とツールを更新します。Update the project's dependencies and tools.

    dotnet restore コマンドを実行して、プロジェクトで指定された依存関係を復元します (注記参照)。Run the dotnet restore (see note) command to restore the dependencies specified in your project.

  6. アプリのデバッグ ビルドを作成します。Create a Debug build of your app.

    コマンド ラインから、dotnet build コマンドを使用します。From the command line, use the dotnet build command.

  7. プログラムをデバッグしてテストしたら、アプリと共に展開するファイルをアプリの対象のプラットフォームごとに作成します。After you've debugged and tested the program, create the files to be deployed with your app for each platform that it targets.

    両方の対象プラットフォームに、次のように dotnet publish コマンドを使用します。Use the dotnet publish command for both target platforms as follows:

    dotnet publish -c Release -r win10-x64
    dotnet publish -c Release -r osx.10.11-x64
    

    これにより、各ターゲット プラットフォームに対してアプリのリリース (デバッグではなく) バージョンが作成されます。This creates a Release (rather than a Debug) version of your app for each target platform. 作成されたファイルは、プロジェクトの .\bin\Release\netcoreapp1.1<runtime_identifier> サブディレクトリにある publish という名前のサブディレクトリに配置されます。The resulting files are placed in a subdirectory named publish that's in a subdirectory of your project's .\bin\Release\netcoreapp1.1<runtime_identifier> subdirectory. 各サブディレクトリには、アプリの起動に必要なファイルの完全なセット (アプリ ファイルとすべての .NET Core ファイルの両方) が含まれています。Note that each subdirectory contains the complete set of files (both your app files and all .NET Core files) needed to launch your app.

アプリケーションのファイルと共に、発行プロセスは、アプリに関するデバッグ情報を含むプログラム データベース (.pdb) ファイルを出力します。Along with your application's files, the publishing process emits a program database (.pdb) file that contains debugging information about your app. このファイルは、主に例外のデバッグに役立ちます。The file is useful primarily for debugging exceptions. これを、アプリケーションのファイルにはパッケージ化しないよう選択できます。You can choose not to package it with your application's files. ただし、アプリのリリース ビルドをデバッグする場合のために、保存しておくことをお勧めします。You should, however, save it in the event that you want to debug the Release build of your app.

発行したファイルは、任意の方法で展開できます。Deploy the published files in any way you like. たとえば、Zip ファイルにパッケージ化したり、単純な copy コマンドを使用したり、任意のインストール パッケージで展開したりできます。For example, you can package them in a Zip file, use a simple copy command, or deploy them with any installation package of your choice.

このプロジェクトの完全な csproj ファイルを次に示します。The following is the complete csproj file for this project.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
</Project>

サードパーティの依存関係を含む、自己完結型の展開Self-contained deployment with third-party dependencies

1 つまたは複数のサードパーティの依存関係を含む自己完結型の展開を展開するプロセスには、依存関係の追加が含まれます。Deploying a self-contained deployment with one or more third-party dependencies involves adding the dependencies. dotnet restore コマンドを実行する前に、次の 2 つの追加手順を実行する必要があります(注記参照)。Two additional steps are required before you can run the dotnet restore (see note) command:

  1. 任意のサードパーティ ライブラリへの参照を csproj ファイルの <ItemGroup> セクションに追加します。Add references to any third-party libraries to the <ItemGroup> section of your csproj file. 次の <ItemGroup> セクションは、サードパーティ ライブラリとして Json.NET を使用します。The following <ItemGroup> section uses Json.NET as a third-party library.

      <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
      </ItemGroup>
    
  2. サードパーティの依存関係を含む NuGet パッケージをシステムにまだダウンロードしていない場合は、ダウンロードします。If you haven't already, download the NuGet package containing the third-party dependency to your system. 依存関係をアプリで使用できるようにするには、依存関係を追加してから、dotnet restore コマンドを実行します (注記参照)。To make the dependency available to your app, execute the dotnet restore (see note) command after adding the dependency. 発行時に依存関係はローカルの NuGet キャッシュからが解決されるので、システムで使用可能になる必要があります。Because the dependency is resolved out of the local NuGet cache at publish time, it must be available on your system.

このプロジェクトの完全な csproj ファイルを次に示します。The following is the complete csproj file for this project:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
  </ItemGroup>
</Project>

アプリケーションを展開すると、アプリで使用されるすべてのサードパーティの依存関係も、アプリケーション ファイルに含まれています。When you deploy your application, any third-party dependencies used in your app are also contained with your application files. アプリが実行されているシステムには、サードパーティ ライブラリは必要ありません。Third-party libraries aren't required on the system on which the app is running.

サードパーティ ライブラリを含む自己完結型の展開は、そのライブラリでサポートされるプラットフォームにのみ展開できます。Note that you can only deploy a self-contained deployment with a third-party library to platforms supported by that library. これは、フレームワークに依存する展開にサード パーティの依存関係とネイティブの依存関係があり、ネイティブの依存関係はアプリがインストールされたプラットフォームと対応している必要がある場合と似ています。This is similar to having third-party dependencies with native dependencies in a framework-dependent deployment, where the native dependencies must be compatible with the platform to which the app is deployed.

注意

Starting with .NET Core 2.0, you don't have to run dotnet restore because it's run implicitly by all commands, such as dotnet build and dotnet run, that require a restore to occur. It's still a valid command in certain scenarios where doing an explicit restore makes sense, such as continuous integration builds in Visual Studio Team Services or in build systems that need to explicitly control the time at which the restore occurs.

関連項目See also

.NET Core アプリケーションの展開 .NET Core Application Deployment
.NET Core のランタイム識別子 (RID) のカタログ.NET Core Runtime IDentifier (RID) catalog