dotnet publishdotnet publish

この記事の対象: ✔️ .NET Core 2.1 SDK 以降のバージョンThis article applies to: ✔️ .NET Core 2.1 SDK and later versions

名前Name

dotnet publish - ホスティング システムへの展開のため、アプリケーションとその依存関係をフォルダーに発行します。dotnet publish - Publishes the application and its dependencies to a folder for deployment to a hosting system.

構文Synopsis

dotnet publish [<PROJECT>|<SOLUTION>] [-c|--configuration <CONFIGURATION>]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
    [--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
    [-p:PublishReadyToRun=true] [-p:PublishSingleFile=true] [-p:PublishTrimmed=true]
    [-r|--runtime <RUNTIME_IDENTIFIER>] [--self-contained [true|false]]
    [--no-self-contained] [-v|--verbosity <LEVEL>]
    [--version-suffix <VERSION_SUFFIX>]

dotnet publish -h|--help

説明Description

dotnet publish はアプリケーションをコンパイルし、プロジェクト ファイルに指定されたその依存関係を読み取り、結果のファイル セットをディレクトリに発行します。dotnet publish compiles the application, reads through its dependencies specified in the project file, and publishes the resulting set of files to a directory. 出力には次のアセットが含まれます。The output includes the following assets:

  • アセンブリの中間言語 (IL) コード (dll 拡張子)。Intermediate Language (IL) code in an assembly with a dll extension.
  • .deps.json ファイル。プロジェクトのすべての依存関係が含まれます。A .deps.json file that includes all of the dependencies of the project.
  • .runtimeconfig.json ファイル。アプリケーションが想定する共有ランタイムと、ランタイム用の他の構成オプション (ガベージ コレクションの種類など) を指定します。A .runtimeconfig.json file that specifies the shared runtime that the application expects, as well as other configuration options for the runtime (for example, garbage collection type).
  • アプリケーションの依存関係。NuGet キャッシュから出力フォルダーにコピーされます。The application's dependencies, which are copied from the NuGet cache into the output folder.

dotnet publish コマンドの出力は、実行のためにホスト システム (サーバー、PC、Mac、ラップトップなど) にすぐに展開できます。The dotnet publish command's output is ready for deployment to a hosting system (for example, a server, PC, Mac, laptop) for execution. これは、アプリケーションの展開を準備するための正式にサポートされている唯一の方法です。It's the only officially supported way to prepare the application for deployment. プロジェクトに指定されている展開の種類によっては、ホスティング システムに .NET Core 共有ランタイムがインストールされている場合とされていない場合があります。Depending on the type of deployment that the project specifies, the hosting system may or may not have the .NET Core shared runtime installed on it. 詳細については、「.NET Core CLI を使用して .NET Core アプリを発行する」を参照してください。For more information, see Publish .NET Core apps with the .NET Core CLI.

暗黙的な復元Implicit restore

dotnet restore を実行する必要がなくなりました。復元を必要とするすべてのコマンド (dotnet newdotnet builddotnet rundotnet testdotnet publishdotnet pack など) によって暗黙的に実行されるためです。You don't have to run dotnet restore because it's run implicitly by all commands that require a restore to occur, such as dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish, and dotnet pack. 暗黙的な復元を無効にするには、--no-restore オプションを使用します。To disable implicit restore, use the --no-restore option.

Azure DevOps Services の継続的インテグレーション ビルドなどの、明示的な復元が意味のある一部のシナリオや、復元が行われるタイミングを明示的に制御する必要があるビルド システムでは、dotnet restore は引き続き有用なコマンドです。The dotnet restore command is still useful in certain scenarios where explicitly restoring makes sense, such as continuous integration builds in Azure DevOps Services or in build systems that need to explicitly control when the restore occurs.

NuGet フィードの管理方法については、dotnet restore のドキュメントをご覧ください。For information about how to manage NuGet feeds, see the dotnet restore documentation.

MSBuildMSBuild

dotnet publish コマンドは、Publish ターゲットを呼び出す MSBuild を呼び出します。The dotnet publish command calls MSBuild, which invokes the Publish target. dotnet publish に渡されたすべてのパラメーターが MSBuild に渡されます。Any parameters passed to dotnet publish are passed to MSBuild. -c-o のパラメーターは、それぞれ MSBuild の ConfigurationPublishDir にマップします。The -c and -o parameters map to MSBuild's Configuration and PublishDir properties, respectively.

dotnet publish コマンドは、プロパティを設定する -p やロガーを定義する -l などの MSBuild オプションも受け入れます。The dotnet publish command accepts MSBuild options, such as -p for setting properties and -l to define a logger. たとえば、-p:<NAME>=<VALUE> という形式を使用して、MSBuild プロパティを設定できます。For example, you can set an MSBuild property by using the format: -p:<NAME>=<VALUE>. また、 .pubxml ファイルを参照することで、公開関連のプロパティを設定することもできます。次に例を示します。You can also set publish-related properties by referring to a .pubxml file, for example:

dotnet publish -p:PublishProfile=FolderProfile

前記の例では、 <project_folder>/Properties/PublishProfiles フォルダー内に見つかった FolderProfile.pubxml ファイルが使用されています。The preceding example uses the FolderProfile.pubxml file that is found in the <project_folder>/Properties/PublishProfiles folder. PublishProfile プロパティの設定時にパスとファイル拡張子を指定した場合、それらは無視されます。If you specify a path and file extension when setting the PublishProfile property, they are ignored. 既定では、MSBuild によって Properties/PublishProfiles フォルダー内が調べられ、pubxml ファイル拡張子が前提とされます。MSBuild by default looks in the Properties/PublishProfiles folder and assumes the pubxml file extension. パスと拡張子を含むファイル名を指定するには、PublishProfile プロパティではなく PublishProfileFullPath プロパティを設定します。To specify the path and filename including extension, set the PublishProfileFullPath property instead of the PublishProfile property.

詳細については、次のリソースを参照してください。For more information, see the following resources:

引数Arguments

  • PROJECT|SOLUTION

    発行するプロジェクトまたはソリューション。The project or solution to publish.

    • PROJECT は、C#、F#、または Visual Basic のプロジェクト ファイルのパスおよびファイル名か、C#、F#、または Visual Basic のプロジェクト ファイルを含むディレクトリへのパスです。PROJECT is the path and filename of a C#, F#, or Visual Basic project file, or the path to a directory that contains a C#, F#, or Visual Basic project file. ディレクトリが指定されていない場合は、既定で現在のディレクトリに設定されます。If the directory is not specified, it defaults to the current directory.

    • SOLUTION は、ソリューション ファイルのパスとファイル名 ( .sln 拡張子)、またはソリューション ファイルを含むディレクトリのパスです。SOLUTION is the path and filename of a solution file (.sln extension), or the path to a directory that contains a solution file. ディレクトリが指定されていない場合は、既定で現在のディレクトリに設定されます。If the directory is not specified, it defaults to the current directory. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

オプションOptions

  • -c|--configuration <CONFIGURATION>

    ビルド構成を定義します。Defines the build configuration. ほとんどのプロジェクトの既定値は Debug ですが、プロジェクトでビルド構成設定をオーバーライドできます。The default for most projects is Debug, but you can override the build configuration settings in your project.

  • -f|--framework <FRAMEWORK>

    指定したターゲット フレームワークのアプリケーションを発行します。Publishes the application for the specified target framework. ターゲット フレームワークはプロジェクト ファイルで指定する必要があります。You must specify the target framework in the project file.

  • --force

    最後の復元が成功した場合でも、すべての依存関係が強制的に解決されます。Forces all dependencies to be resolved even if the last restore was successful. このフラグを指定することは、project.assets.json ファイルを削除することと同じです。Specifying this flag is the same as deleting the project.assets.json file.

  • -h|--help

    コマンドの短いヘルプを印刷します。Prints out a short help for the command.

  • --interactive

    コマンドを停止して、ユーザーの入力または操作のために待機させることができます。Allows the command to stop and wait for user input or action. たとえば、認証を完了する場合があります。For example, to complete authentication. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

  • --manifest <PATH_TO_MANIFEST_FILE>

    アプリによって公開された一連のパッケージをトリミングするために使用するターゲット マニフェストを 1 つまたは複数指定します。Specifies one or several target manifests to use to trim the set of packages published with the app. マニフェスト ファイルは、dotnet store コマンドの出力の一部です。The manifest file is part of the output of the dotnet store command. 複数のマニフェストを指定するには、マニフェストごとに --manifest を追加します。To specify multiple manifests, add a --manifest option for each manifest.

  • --no-build

    発行の前にプロジェクトをビルドしません。Doesn't build the project before publishing. また、--no-restore フラグが暗黙的に設定されます。It also implicitly sets the --no-restore flag.

  • --no-dependencies

    プロジェクト間参照を無視し、ルート プロジェクトのみを復元します。Ignores project-to-project references and only restores the root project.

  • --nologo

    著作権情報を表示しません。Doesn't display the startup banner or the copyright message. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

  • --no-restore

    コマンドを実行するときに、暗黙的な復元を実行しません。Doesn't execute an implicit restore when running the command.

  • -o|--output <OUTPUT_DIRECTORY>

    出力ディレクトリのパスを指定します。Specifies the path for the output directory.

    指定しない場合、ランタイムに依存する実行可能ファイルおよびクロスプラットフォーム バイナリの既定値は [project_file_folder]./bin/[configuration]/[framework]/publish/ に設定されます。If not specified, it defaults to [project_file_folder]./bin/[configuration]/[framework]/publish/ for a runtime-dependent executable and cross-platform binaries. 自己完結型の実行可能ファイルの場合、既定値は [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ に設定されます。It defaults to [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ for a self-contained executable.

    Web プロジェクトで、出力フォルダーがプロジェクト フォルダー内にある場合、dotnet publish コマンドを連続して実行すると、出力フォルダーが入れ子になって生成されます。In a web project, if the output folder is in the project folder, successive dotnet publish commands result in nested output folders. たとえば、プロジェクト フォルダーが myproject で、発行の出力フォルダーが myproject/publish であり、dotnet publish を 2 回実行した場合、2 回目の実行では myproject/publish/publish.config および .json ファイルなどのコンテンツ ファイルが配置されます。For example, if the project folder is myproject, and the publish output folder is myproject/publish, and you run dotnet publish twice, the second run puts content files such as .config and .json files in myproject/publish/publish. 発行フォルダーが入れ子にならないようにするには、プロジェクト フォルダーの直下以外の発行フォルダーを指定するか、またはプロジェクトから発行フォルダーを除外します。To avoid nesting publish folders, specify a publish folder that is not directly under the project folder, or exclude the publish folder from the project. publishoutput という名前の発行フォルダーを除外するには、 .csproj ファイルの PropertyGroup 要素に次の要素を追加します。To exclude a publish folder named publishoutput, add the following element to a PropertyGroup element in the .csproj file:

    <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
    
    • .NET Core 3.x SDK 以降.NET Core 3.x SDK and later

      プロジェクトの発行時に相対パスが指定された場合、生成された出力ディレクトリは、プロジェクト ファイルの場所ではなく、現在の作業ディレクトリに相対的なパスとなります。If a relative path is specified when publishing a project, the output directory generated is relative to the current working directory, not to the project file location.

      ソリューションの発行時に相対パスが指定されている場合、すべてのプロジェクトに対する出力はすべて、現在の作業ディレクトリと相対的な指定されたフォルダーに移動されます。If a relative path is specified when publishing a solution, all output for all projects goes into the specified folder relative to the current working directory. 発行の出力が各プロジェクトの個別のフォルダーに移動されるようにするには、--output オプションの代わりに、msbuild PublishDir プロパティを使用して相対パスを指定します。To make publish output go to separate folders for each project, specify a relative path by using the msbuild PublishDir property instead of the --output option. たとえば、dotnet publish -p:PublishDir=.\publish を使用すると、プロジェクト ファイルが格納されているフォルダーの下にある publish フォルダーに、各プロジェクトの発行の出力が送信されます。For example, dotnet publish -p:PublishDir=.\publish sends publish output for each project to a publish folder under the folder that contains the project file.

    • .NET Core 2.x SDK.NET Core 2.x SDK

      プロジェクトの発行時に相対パスが指定された場合、生成された出力ディレクトリは、現在の作業ディレクトリではなく、プロジェクト ファイルの場所に相対的なパスとなります。If a relative path is specified when publishing a project, the output directory generated is relative to the project file location, not to the current working directory.

      ソリューションの発行時に相対パスを指定すると、各プロジェクトの出力は、プロジェクト ファイルの場所に相対的な別のフォルダーに移動されます。If a relative path is specified when publishing a solution, each project's output goes into a separate folder relative to the project file location. ソリューションの発行時に絶対パスを指定すると、すべてのプロジェクトに対する発行の出力はすべて、指定されたフォルダーに移動されます。If an absolute path is specified when publishing a solution, all publish output for all projects goes into the specified folder.

  • -p:PublishReadyToRun=true

    アプリケーション アセンブリは ReadyToRun (R2R) 形式にコンパイルされます。Compiles application assemblies as ReadyToRun (R2R) format. R2R とは、Ahead-Of-Time (AOT) コンパイルの一種です。R2R is a form of ahead-of-time (AOT) compilation. 詳細については、「ReadyToRun イメージ」を参照してください。For more information, see ReadyToRun images. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

    このオプションは、コマンド ラインではなく、発行プロファイルで指定することをお勧めします。We recommend that you specify this option in a publish profile rather than on the command line. 詳細については、「MSBuild」を参照してください。For more information, see MSBuild.

  • -p:PublishSingleFile=true

    アプリを、プラットフォームごとに単一の実行可能ファイルにパッケージ化します。Packages the app into a platform-specific single-file executable. この実行可能ファイルは自己展開型であり、アプリの実行に必要なすべての依存関係 (ネイティブを含む) を含んでいます。The executable is self-extracting and contains all dependencies (including native) that are required to run the app. アプリを初めて実行すると、アプリ名とビルド ID に基づいてアプリケーションがディレクトリに抽出されます。When the app is first run, the application is extracted to a directory based on the app name and build identifier. アプリケーションを再実行すると、起動は速くなります。Startup is faster when the application is run again. 新しいバージョンが使用されない限り、アプリケーションは自身を 2 回抽出する必要がありません。The application doesn't need to extract itself a second time unless a new version is used. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

    単一ファイルの発行の詳細については、単一ファイル バンドラー設計のドキュメントを参照してください。For more information about single-file publishing, see the single-file bundler design document.

    このオプションは、コマンド ラインではなく、発行プロファイルで指定することをお勧めします。We recommend that you specify this option in a publish profile rather than on the command line. 詳細については、「MSBuild」を参照してください。For more information, see MSBuild.

  • -p:PublishTrimmed=true

    自己完結型の実行可能ファイルを発行するとき、使用されていないライブラリをトリミングして、アプリの展開サイズを減らします。Trims unused libraries to reduce the deployment size of an app when publishing a self-contained executable. 詳細については、「自己完結型の展開と実行可能ファイルのトリミング」を参照してください。For more information, see Trim self-contained deployments and executables. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

    このオプションは、コマンド ラインではなく、発行プロファイルで指定することをお勧めします。We recommend that you specify this option in a publish profile rather than on the command line. 詳細については、「MSBuild」を参照してください。For more information, see MSBuild.

  • --self-contained [true|false]

    アプリケーションと一緒に .NET Core ランタイムを発行します。これにより、ランタイムをターゲット コンピューターにインストールする必要がなくなります。Publishes the .NET Core runtime with your application so the runtime doesn't need to be installed on the target machine. ランタイム識別子が指定され、プロジェクトが (ライブラリ プロジェクトではなく) 実行可能なプロジェクトである場合、既定値は true です。Default is true if a runtime identifier is specified and the project is an executable project (not a library project). 詳細については、.NET Core アプリケーションの発行に関する記事と「.NET Core CLI を使用して .NET Core アプリを発行する」を参照してください。For more information, see .NET Core application publishing and Publish .NET Core apps with the .NET Core CLI.

    true または false を指定せずに、このオプションを使用した場合、既定値は true になります。If this option is used without specifying true or false, the default is true. その場合は、その位置で true または false が想定されているため、--self-contained の直後にソリューションまたはプロジェクト引数を配置しないでください。In that case, don't put the solution or project argument immediately after --self-contained, because true or false is expected in that position.

  • --no-self-contained

    これは、--self-contained false に相当します。Equivalent to --self-contained false. .NET Core 3.0 SDK 以降で使用できます。Available since .NET Core 3.0 SDK.

  • -r|--runtime <RUNTIME_IDENTIFIER>

    指定されたランタイムのアプリケーションを発行します。Publishes the application for a given runtime. ランタイム ID (RID) の一覧については、RID カタログに関するページをご覧ください。For a list of Runtime Identifiers (RIDs), see the RID catalog. 詳細については、.NET Core アプリケーションの発行に関する記事と「.NET Core CLI を使用して .NET Core アプリを発行する」を参照してください。For more information, see .NET Core application publishing and Publish .NET Core apps with the .NET Core CLI.

  • -v|--verbosity <LEVEL>

    コマンドの詳細レベルを設定します。Sets the verbosity level of the command. 指定できる値は、q[uiet]m[inimal]n[ormal]d[etailed]、および diag[nostic] です。Allowed values are q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]. 既定値は minimalにする必要があります。Default value is minimal.

  • --version-suffix <VERSION_SUFFIX>

    プロジェクト ファイルのバージョン フィールドでアスタリスク (*) を置き換えるバージョン サフィックスを定義します。Defines the version suffix to replace the asterisk (*) in the version field of the project file.

使用例Examples

  • 現在のディレクトリ内にプロジェクト用のランタイムに依存するクロスプラットフォーム バイナリを作成します。Create a runtime-dependent cross-platform binary for the project in the current directory:

    dotnet publish
    

    .NET Core 3.0 SDK 以降の場合、この例では、現在のプラットフォーム用のランタイムに依存する実行可能ファイルも作成されます。Starting with .NET Core 3.0 SDK, this example also creates a runtime-dependent executable for the current platform.

  • 特定のランタイムに対して、現在のディレクトリ内にプロジェクト用の自己完結型の実行可能ファイルを作成します。Create a self-contained executable for the project in the current directory, for a specific runtime:

    dotnet publish --runtime osx.10.11-x64
    

    RID をプロジェクト ファイルに含める必要があります。The RID must be in the project file.

  • 特定のプラットフォーム用に、プロジェクト用のランタイムに依存する実行可能ファイルを現在のディレクトリに作成します。Create a runtime-dependent executable for the project in the current directory, for a specific platform:

    dotnet publish --runtime osx.10.11-x64 --self-contained false
    

    RID をプロジェクト ファイルに含める必要があります。The RID must be in the project file. この例は、.NET Core 3.0 SDK 以降のバージョンに適用されます。This example applies to .NET Core 3.0 SDK and later versions.

  • 特定のランタイムとターゲット フレームワーク用に、現在のディレクトリのプロジェクトを発行します。Publish the project in the current directory, for a specific runtime and target framework:

    dotnet publish --framework netcoreapp3.1 --runtime osx.10.11-x64
    
  • 指定されたプロジェクト ファイルを発行します。Publish the specified project file:

    dotnet publish ~/projects/app1/app1.csproj
    
  • 現在のアプリケーションを発行します。ただし、復元操作中はルート プロジェクトのみを復元し、プロジェクト間 (P2P) 参照は復元しないでください。Publish the current application but don't restore project-to-project (P2P) references, just the root project during the restore operation:

    dotnet publish --no-dependencies
    

関連項目See also