dotnet publish
この記事は、✔️.NET Core 3.1 SDK 以降のバージョン 適用されます
名前
dotnet publish
- アプリケーションとその依存関係を、ホスティング システムにデプロイするためのフォルダーに発行します。
概要
dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [--disable-build-servers]
[-f|--framework <FRAMEWORK>] [--force] [--interactive]
[--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
[--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
[--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained [true|false]] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--use-current-runtime, --ucr [true|false]]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet publish -h|--help
形容
dotnet publish
は、アプリケーションをコンパイルし、プロジェクト ファイルで指定された依存関係を読み取り、結果の一連のファイルをディレクトリに発行します。 出力には、次の資産が含まれます。
- dll 拡張子を持つアセンブリ内の中間言語 (IL) コード。
- プロジェクトのすべての依存関係を含む .deps.json ファイル。
- アプリケーションが予期する共有ランタイムと、ランタイムのその他の構成オプション (ガベージ コレクションの種類など) を指定する .runtimeconfig.json ファイル。
- NuGet キャッシュから出力フォルダーにコピーされるアプリケーションの依存関係。
dotnet publish
コマンドの出力は、ホスティング システム (サーバー、PC、Mac、ノート PC など) に展開して実行する準備ができています。 これは、アプリケーションをデプロイ用に準備するために公式にサポートされている唯一の方法です。 プロジェクトが指定する展開の種類によっては、ホスト システムに .NET 共有ランタイムがインストールされている場合とインストールされていない場合があります。 詳細については、「.NET CLIを使用した .NET アプリの発行」を参照してください。
暗黙的な復元
dotnet new
、dotnet build
、dotnet run
、dotnet test
、dotnet publish
、dotnet pack
など、復元を必要とするすべてのコマンドによって暗黙的に実行されるため、dotnet restore
を実行する必要はありません。 暗黙的な復元を無効にするには、--no-restore
オプションを使用します。
NuGet フィードを管理する方法については、dotnet restore
ドキュメントを参照してください。
MSBuild
dotnet publish
コマンドは MSBuild を呼び出し、Publish
ターゲットを呼び出します。
IsPublishable
プロパティ が特定のプロジェクトの false
に設定されている場合、Publish
ターゲットを呼び出すことはできません。また、dotnet publish
コマンドは、プロジェクトで暗黙的な dotnet 復元 のみを実行します。
dotnet publish
に渡されるすべてのパラメーターは MSBuild に渡されます。
-c
パラメーターと -o
パラメーターは、それぞれ MSBuild の Configuration
プロパティと PublishDir
プロパティにマップされます。
dotnet publish
コマンドは、プロパティを設定するための -p
やロガーを定義する -l
などの MSBuild オプションを受け入れます。 たとえば、MSBuild プロパティは、-p:<NAME>=<VALUE>
形式を使用して設定できます。
.pubxml ファイル
パブリッシュ関連のプロパティは、.pubxml ファイルを参照して設定することもできます。 例えば:
dotnet publish -p:PublishProfile=FolderProfile
前の例では、<project_folder>/Properties/PublishProfiles フォルダーにある FolderProfile.pubxml ファイルを使用します。
PublishProfile
プロパティの設定時にパスとファイル拡張子を指定した場合、それらは無視されます。 MSBuild は既定で、Properties/PublishProfiles フォルダーを検索し、pubxml ファイル拡張子を前提としています。 拡張子を含むパスとファイル名を指定するには、PublishProfile
プロパティの代わりに PublishProfileFullPath
プロパティを設定します。
.pubxml ファイルで、次の手順を実行します。
-
PublishUrl
は、発行ターゲットを示すために Visual Studio によって使用されます。 -
PublishDir
は、発行先を示すために CLI によって使用されます。
シナリオをすべての場所で動作させる場合は、両方のプロパティを .pubxml ファイル内の同じ値に初期化できます。 dotnet/sdk#20931
.pubxml ファイルの一部のプロパティは Visual Studio によってのみ受け入れられ、dotnet publish
には影響しません。 ここでは、Visual Studio の動作に合わせて CLI をより多く使用できるように取り組んでいます。 ただし、一部のプロパティは CLI では使用されません。 CLI と Visual Studio の両方で発行のパッケージ化の側面が行われ、dotnet/sdk#29817 、それに関連するその他のプロパティのサポートを追加する予定です。 ただし、CLI では発行のデプロイ自動化の側面は行われず、それに関連するプロパティはサポートされていません。
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
MSBuild プロパティ
次の MSBuild プロパティは、dotnet publish
の出力を変更します。
PublishReadyToRun
アプリケーション アセンブリを ReadyToRun (R2R) 形式でコンパイルします。 R2R は、事前コンパイル (AOT) の形式です。 詳細については、「ReadyToRun イメージ
を参照してください。 ランタイム エラーの原因となる可能性のある依存関係の不足に関する警告を表示するには、
PublishReadyToRunShowWarnings=true
を使用します。コマンド ラインではなく、発行プロファイルで
PublishReadyToRun
を指定することをお勧めします。PublishSingleFile
プラットフォーム固有の単一ファイル実行可能ファイルにアプリをパッケージ化します。 単一ファイルの発行の詳細については、単一ファイル のバンドル設計ドキュメント を参照してください。
コマンド ラインではなく、プロジェクト ファイルでこのオプションを指定することをお勧めします。
PublishTrimmed
自己完結型実行可能ファイルを発行するときに、未使用のライブラリをトリミングしてアプリのデプロイ サイズを小さくします。 詳細については、「自己完結型のデプロイと実行可能ファイルをトリミングする」を参照してください。 .NET 6 SDK 以降で使用できます。
コマンド ラインではなく、プロジェクト ファイルでこのオプションを指定することをお勧めします。
詳細については、次のリソースを参照してください。
- MSBuild コマンド ライン リファレンス の
- ASP.NET Core アプリの展開 用の Visual Studio 発行プロファイル (.pubxml) を
する - dotnet msbuild を
する
ワークロード マニフェストのダウンロード
このコマンドを実行すると、ワークロードのアドバタイズ マニフェストの非同期バックグラウンド ダウンロードが開始されます。 このコマンドが完了してもダウンロードが実行されている場合、ダウンロードは停止されます。 詳細については、「Advertising マニフェストの」を参照してください。
引数
PROJECT|SOLUTION
発行するプロジェクトまたはソリューション。
PROJECT
は、C#、F#、または Visual Basic プロジェクト ファイルのパスとファイル名、または C#、F#、または Visual Basic プロジェクト ファイルを含むディレクトリへのパスです。 ディレクトリが指定されていない場合は、既定で現在のディレクトリになります。SOLUTION
は、ソリューション ファイルのパスとファイル名 (拡張子.sln)、またはソリューション ファイルを含むディレクトリへのパスです。 ディレクトリが指定されていない場合は、既定で現在のディレクトリになります。
オプション
-a|--arch <ARCHITECTURE>
ターゲット アーキテクチャを指定します。 これは、指定された値が既定の RID と組み合わされる ランタイム識別子 (RID)を設定するための簡単な構文です。 たとえば、
win-x64
コンピューターでは、--arch x86
を指定すると RID がwin-x86
に設定されます。 このオプションを使用する場合は、-r|--runtime
オプションを使用しないでください。 .NET 6 Preview 7 以降で使用できます。
--artifacts-path <ARTIFACTS_DIR>
実行されたコマンドからのすべてのビルド出力ファイルは、指定されたパスの下のサブフォルダーに配置され、プロジェクトで区切られます。 詳細については、「Artifacts Output Layout」を参照してください。 .NET 8 SDK 以降で使用できます。
-c|--configuration <CONFIGURATION>
ビルド構成を定義します。 .NET 8 SDK 以降のバージョンで開発している場合、TargetFramework が
net8.0
以降のバージョンに設定されているプロジェクトでは、既定でRelease
構成が使用されます。 既定のビルド構成は、以前のバージョンの SDK と以前のターゲット フレームワークに対してDebug
されます。 プロジェクト設定またはこのオプションを使用して、既定値をオーバーライドできます。 詳細については、「dotnet publish」リリース構成 を使用し、'dotnet pack' でリリース構成を使用を参照してください。
--disable-build-servers
永続的なビルド サーバーを無視するようにコマンドを強制します。 このオプションは、ビルド キャッシュのすべての使用を無効にする一貫した方法を提供します。これにより、ビルドが最初から強制的に実行されます。 キャッシュに依存しないビルドは、何らかの理由でキャッシュが破損している、または正しくない可能性がある場合に便利です。 .NET 7 SDK 以降で使用できます。
-f|--framework <FRAMEWORK>
指定した ターゲット フレームワークのアプリケーションを発行します。 プロジェクト ファイルでターゲット フレームワークを指定する必要があります。
--force
最後の復元が成功した場合でも、すべての依存関係を強制的に解決します。 このフラグの指定は、project.assets.json ファイルの削除と同じです。
-?|-h|--help
コマンドの使用方法の説明を出力します。
--interactive
コマンドを停止し、ユーザー入力またはアクションを待機できるようにします。 たとえば、認証を完了します。 .NET Core 3.0 SDK 以降で使用できます。
--manifest <PATH_TO_MANIFEST_FILE>
アプリで発行されたパッケージのセットをトリミングするために使用、1 つまたは複数の
ターゲット マニフェストを指定します。 マニフェスト ファイルは、 dotnet store
コマンドの出力の一部です。 複数のマニフェストを指定するには、マニフェストごとに--manifest
オプションを追加します。--no-build
発行前にプロジェクトをビルドしません。 また、
--no-restore
フラグも暗黙的に設定します。--no-dependencies
プロジェクト間参照を無視し、ルート プロジェクトのみを復元します。
--nologo
スタートアップ バナーまたは著作権メッセージは表示されません。
--no-restore
コマンドの実行時に暗黙的な復元を実行しません。
-o|--output <OUTPUT_DIRECTORY>
出力ディレクトリのパスを指定します。
指定しない場合、フレームワーク依存の実行可能ファイルとクロスプラットフォーム バイナリの既定の [project_file_folder]/bin/[configuration]/[framework]/publish/。 既定では、自己完結型実行可能ファイルの [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ を
します。 Web プロジェクトでは、出力フォルダーがプロジェクト フォルダー内にある場合、連続する
dotnet publish
コマンドによって、入れ子になった出力フォルダーが生成されます。 たとえば、プロジェクト フォルダーが myprojectされ、発行出力フォルダーが myproject/publish され、 を 2 回実行した場合、2 回目の実行では、 .config ファイルや.json ファイルなどのコンテンツ ファイルが myproject/publish/publishに配置されます。 発行フォルダーを入れ子にしないようにするには、プロジェクト フォルダーの下に直接 されていない発行フォルダーを指定するか、発行フォルダーをプロジェクトから除外します。 publishoutput という名前発行フォルダーを除外するには、 .csproj ファイル内の要素に次の要素を追加します。 <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
.NET 7.0.200 SDK 以降
ソリューションでこのコマンドを実行するときに
--output
オプションを指定すると、出力パスのセマンティクスが明確でないため、CLI によって警告 (7.0.200 のエラー) が出力されます。--output
オプションは許可されていません。ビルドされたすべてのプロジェクトのすべての出力が指定されたディレクトリにコピーされます。これは、複数のターゲットを持つプロジェクトと互換性がありません。また、直接依存関係と推移的依存関係のバージョンが異なるプロジェクトにもコピーされます。 詳細については、「ソリューション レベルの--output
オプション ビルド関連のコマンドでは無効になった」を参照してください。.NET Core 3.x SDK 以降
プロジェクトの発行時に相対パスを指定した場合、生成される出力ディレクトリは、プロジェクト ファイルの場所ではなく、現在の作業ディレクトリに対する相対パスになります。
ソリューションの発行時に相対パスを指定した場合、すべてのプロジェクトのすべての出力は、現在の作業ディレクトリに対して指定されたフォルダーに移動します。 発行出力をプロジェクトごとに個別のフォルダーに移動するには、
--output
オプションの代わりに msbuildPublishDir
プロパティを使用して相対パスを指定します。 たとえば、dotnet publish -p:PublishDir=.\publish
は、各プロジェクトの発行出力を、プロジェクト ファイルを含むフォルダーの下にあるpublish
フォルダーに送信します。.NET Core 2.x SDK
プロジェクトの発行時に相対パスを指定した場合、生成される出力ディレクトリは、現在の作業ディレクトリではなく、プロジェクト ファイルの場所に対して相対的になります。
ソリューションの発行時に相対パスを指定した場合、各プロジェクトの出力は、プロジェクト ファイルの場所を基準にして個別のフォルダーに格納されます。 ソリューションの発行時に絶対パスを指定すると、すべてのプロジェクトのすべての発行出力が指定したフォルダーに格納されます。
--os <OS>
ターゲット オペレーティング システム (OS) を指定します。 これは、指定された値が既定の RID と組み合わされる ランタイム識別子 (RID)を設定するための簡単な構文です。 たとえば、
win-x64
コンピューターでは、--os linux
を指定すると RID がlinux-x64
に設定されます。 このオプションを使用する場合は、-r|--runtime
オプションを使用しないでください。 .NET 6 以降で使用できます。
--sc|--self-contained [true|false]
ターゲット コンピューターにランタイムをインストールする必要がないように、アプリケーションで .NET ランタイムを発行します。 ランタイム識別子が指定され、プロジェクトが実行可能プロジェクト (ライブラリ プロジェクトではない) の場合、既定値は
true
です。 詳細については、「.NET CLIを使用した .NET アプリケーションの発行 と .NET アプリの発行する」を参照してください。 true
またはfalse
を指定せずにこのオプションを使用する場合、既定値はtrue
です。 その場合は、true
またはfalse
がその位置に予想されるため、--self-contained
の直後にソリューションまたはプロジェクトの引数を配置しないでください。--no-self-contained
--self-contained false
に相当します。--source <SOURCE>
復元操作中に使用する NuGet パッケージ ソースの URI。
-r|--runtime <RUNTIME_IDENTIFIER>
特定のランタイムのアプリケーションを発行します。 ランタイム識別子 (RID) の一覧については、RID カタログを参照してください。 詳細については、「.NET CLIを使用した .NET アプリケーションの発行 と .NET アプリの発行
する」を参照してください。 このオプションを使用する場合は、 --self-contained
または--no-self-contained
も使用します。
--tl:[auto|on|off]
ターミナル ロガー をビルド出力に使用するかどうかを指定します。 既定値は
auto
で、ターミナル ログを有効にする前にまず環境を確認します。 環境チェックでは、ターミナルが最新の出力機能を使用でき、新しいロガーを有効にする前にリダイレクトされた標準出力を使用していないことを確認します。on
環境チェックをスキップし、ターミナル のログ記録を有効にします。off
環境チェックをスキップし、既定のコンソール ロガーを使用します。ターミナル ロガーには、復元フェーズとビルド フェーズが表示されます。 各フェーズでは、現在ビルド中のプロジェクトがターミナルの下部に表示されます。 ビルドしている各プロジェクトは、現在ビルドされている MSBuild ターゲットと、そのターゲットに費やされた時間の両方を出力します。 この情報を検索して、ビルドの詳細を確認できます。 プロジェクトのビルドが完了すると、次の内容をキャプチャする "ビルド完了" セクションが 1 つ書き込まれます。
- ビルドされたプロジェクトの名前。
- ターゲット フレームワーク (マルチターゲットの場合)。
- そのビルドの状態。
- そのビルドの主な出力 (ハイパーリンク)。
- そのプロジェクトに対して生成されたすべての診断。
このオプションは、.NET 8 以降で使用できます。
--use-current-runtime, --ucr [true|false]
コンピューターのいずれかに基づいて、プラットフォームのポータブル
RuntimeIdentifier
にRuntimeIdentifier
を設定します。 これは、SelfContained
、PublishAot
、PublishSelfContained
、PublishSingleFile
、PublishReadyToRun
などのRuntimeIdentifier
を必要とするプロパティで暗黙的に発生します。 プロパティが false に設定されている場合、その暗黙的な解決は行われなくなります。
-v|--verbosity <LEVEL>
コマンドの詳細レベルを設定します。 使用できる値は、
q[uiet]
、m[inimal]
、n[ormal]
、d[etailed]
、およびdiag[nostic]
です。 既定値はminimal
です。 詳細については、LoggerVerbosityを参照してください。
--version-suffix <VERSION_SUFFIX>
プロジェクト ファイルのバージョン フィールドのアスタリスク (
*
) を置き換えるバージョン サフィックスを定義します。
例
現在のディレクトリにプロジェクトの フレームワーク依存のクロスプラットフォーム バイナリ を作成します。
dotnet publish
.NET Core 3.0 SDK 以降では、この例では、現在のプラットフォーム用の フレームワークに依存する実行可能ファイル も作成します。
特定のランタイムに対して、現在のディレクトリ内のプロジェクトの 自己完結型実行可能ファイル を作成します。
dotnet publish --runtime osx-x64
RID はプロジェクト ファイルに含まれている必要があります。
特定のプラットフォームに対して、現在のディレクトリ内のプロジェクトに対して、フレームワークに依存する 実行可能ファイルの を作成します。
dotnet publish --runtime osx-x64 --self-contained false
RID はプロジェクト ファイルに含まれている必要があります。 この例は、.NET Core 3.0 SDK 以降のバージョンに適用されます。
特定のランタイムとターゲット フレームワークのプロジェクトを現在のディレクトリに発行します。
dotnet publish --framework net8.0 --runtime osx-x64
指定したプロジェクト ファイルを発行します。
dotnet publish ~/projects/app1/app1.csproj
現在のアプリケーションを発行しますが、プロジェクト間 (P2P) 参照は復元せず、復元操作中はルート プロジェクトのみを復元します。
dotnet publish --no-dependencies
関連項目
- .NET アプリケーションの発行の概要
- .NET CLI を使用して .NET アプリを発行する
- ターゲット フレームワーク の
- ランタイム識別子 (RID) カタログ
- dotnet 発行 を使用して .NET アプリをコンテナー化する
- macOS Catalina Notarization の使用
- 発行されたアプリケーション のディレクトリ構造の
- MSBuild コマンド ライン リファレンス の
- ASP.NET Core アプリの展開 用の Visual Studio 発行プロファイル (.pubxml) を
する - dotnet msbuild を
する - 自己完結型デプロイ をトリミングする
.NET