この記事の対象: ✔️ .NET 6 SDK 以降のバージョン
名前
dotnet publish - アプリケーションとその依存関係を、ホスティング システムにデプロイするためのフォルダーに発行します。
概要
dotnet publish [<PROJECT>|<SOLUTION>|<FILE>] [-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] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--ucr|--use-current-runtime]
[-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 アプリケーションの発行の概要」を参照してください。
暗黙的な復元
dotnet restore、dotnet new、dotnet build、dotnet run、dotnet test、dotnet publishなど、復元を必要とするすべてのコマンドによって暗黙的に実行されるため、dotnet pack を実行する必要はありません。 暗黙的な復元を無効にするには、--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
前の例では、 フォルダーにある < ファイルを使用します。
PublishProfile プロパティの設定時にパスとファイル拡張子を指定した場合、それらは無視されます。 MSBuild は既定で、Properties/PublishProfiles フォルダーを検索し、pubxml ファイル拡張子を前提としています。 拡張子を含むパスとファイル名を指定するには、PublishProfileFullPath プロパティの代わりに PublishProfile プロパティを設定します。
.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 では発行のデプロイ自動化の側面は行われず、それに関連するプロパティはサポートされていません。
LastUsedBuildConfigurationConfigurationPlatformLastUsedPlatformTargetFrameworkTargetFrameworksRuntimeIdentifierRuntimeIdentifiers
MSBuild プロパティ
次の MSBuild プロパティは、dotnet publishの出力を変更します。
PublishReadyToRunアプリケーション アセンブリを ReadyToRun (R2R) 形式でコンパイルします。 R2R は、事前コンパイル (AOT) の形式です。 詳細については、「ReadyToRun イメージ
を参照してください。 ランタイム エラーの原因となる可能性のある依存関係の不足に関する警告を表示するには、
PublishReadyToRunShowWarnings=trueを使用します。コマンド ラインではなく、発行プロファイルで
PublishReadyToRunを指定することをお勧めします。PublishSingleFileプラットフォーム固有の単一ファイル実行可能ファイルにアプリをパッケージ化します。 単一ファイルの発行の詳細については、単一ファイル のバンドル設計ドキュメント を参照してください。 このプロパティを
trueに設定すると、PublishSelfContainedプロパティは暗黙的にtrueに設定されます。コマンド ラインではなく、プロジェクト ファイルでこのオプションを指定することをお勧めします。
PublishTrimmed自己完結型実行可能ファイルを発行するときに、未使用のライブラリをトリミングしてアプリのデプロイ サイズを小さくします。 詳細については、「自己完結型のデプロイと実行可能ファイルをトリミングする」を参照してください。 .NET 6 SDK 以降で使用できます。
コマンド ラインではなく、プロジェクト ファイルでこのオプションを指定することをお勧めします。
詳細については、次のリソースを参照してください。
- MSBuild コマンド ライン リファレンス の
- ASP.NET Core アプリの展開 用の Visual Studio 発行プロファイル (.pubxml) を
する - dotnet msbuild を
する
ワークロード マニフェストのダウンロード
このコマンドを実行すると、ワークロードのアドバタイズ マニフェストの非同期バックグラウンド ダウンロードが開始されます。 このコマンドが完了してもダウンロードが実行されている場合、ダウンロードは停止されます。 詳細については、「Advertising マニフェストの」を参照してください。
引数
PROJECT | SOLUTION | FILE
操作するプロジェクトまたはソリューション、または C# (ファイル ベースのアプリ) ファイル。 ファイルが指定されていない場合、MSBuild は現在のディレクトリでプロジェクトまたはソリューションを検索します。
PROJECTは、C#、F#、または Visual Basic プロジェクト ファイルのパスとファイル名、または C#、F#、または Visual Basic プロジェクト ファイルを含むディレクトリへのパスです。SOLUTIONは、ソリューション ファイルのパスとファイル名 (.slnx 拡張子.sln または)、またはソリューション ファイルを含むディレクトリへのパスです。FILEは.NET 10 で追加された引数です。 ファイル ベースのアプリのパスとファイル名。 ファイル ベースのアプリは、対応するプロジェクト (.csproj) ファイルなしでビルドおよび実行される 1 つのファイル内に含まれています。 詳細については、「 ファイル ベースの C# アプリをビルドする」を参照してください。
オプション
-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 が
Release以降のバージョンに設定されているプロジェクトでは、既定でnet8.0構成が使用されます。 既定のビルド構成は、以前のバージョンの SDK と以前のターゲット フレームワークに対してDebugされます。 プロジェクト設定またはこのオプションを使用して、既定値をオーバーライドできます。 詳細については、「dotnet publish」リリース構成 を使用し、'dotnet pack' でリリース構成を使用を参照してください。
--disable-build-servers永続的なビルド サーバーを無視するようにコマンドを強制します。 このオプションは、ビルド キャッシュのすべての使用を無効にする一貫した方法を提供します。これにより、ビルドが最初から強制的に実行されます。 キャッシュに依存しないビルドは、何らかの理由でキャッシュが破損している、または正しくない可能性がある場合に便利です。 .NET 7 SDK 以降で使用できます。
-f|--framework <FRAMEWORK>指定した ターゲット フレームワークのアプリケーションを発行します。 プロジェクト ファイルでターゲット フレームワークを指定する必要があります。
--force最後の復元が成功した場合でも、すべての依存関係を強制的に解決します。 このフラグの指定は、project.assets.json ファイルの削除と同じです。
--interactiveコマンドを停止し、ユーザー入力またはアクションを待機できるようにします。 たとえば、認証を完了します。
--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 以降
プロジェクトの発行時に相対パスを指定した場合、生成される出力ディレクトリは、プロジェクト ファイルの場所ではなく、現在の作業ディレクトリに対する相対パスになります。
ソリューションの発行時に相対パスを指定した場合、すべてのプロジェクトのすべての出力は、現在の作業ディレクトリに対して指定されたフォルダーに移動します。 発行出力をプロジェクトごとに個別のフォルダーに移動するには、
PublishDirオプションの代わりに msbuild--outputプロパティを使用して相対パスを指定します。 たとえば、dotnet publish -p:PublishDir=.\publishは、各プロジェクトの発行出力を、プロジェクト ファイルを含むフォルダーの下にあるpublishフォルダーに送信します。
--os <OS>ターゲット オペレーティング システム (OS) を指定します。 これは、指定された値が既定の RID と組み合わされる ランタイム識別子 (RID)を設定するための簡単な構文です。 たとえば、
win-x64コンピューターでは、--os linuxを指定すると RID がlinux-x64に設定されます。 このオプションを使用する場合は、-r|--runtimeオプションを使用しないでください。 .NET 6 以降で使用できます。
--sc|--self-containedターゲット コンピューターにランタイムをインストールする必要がないように、アプリケーションで .NET ランタイムを発行します。 既定値は
trueです。
--no-self-contained--self-contained falseに相当します。
--source <SOURCE>復元操作中に使用する NuGet パッケージ ソースの URI。
-r|--runtime <RUNTIME_IDENTIFIER>特定のランタイムのアプリケーションを発行します。 ランタイム識別子 (RID) の一覧については、RID カタログを参照してください。 詳細については、「 .NET アプリケーションの発行の概要」を参照してください。 このオプションを使用する場合は、
--self-containedまたは--no-self-containedも使用します。
--tl:[auto|on|off]ビルド出力に ターミナル ロガー を使用するかどうかを指定します。 既定値は
autoで、ターミナル ログを有効にする前にまず環境を確認します。 環境チェックでは、ターミナルが最新の出力機能を使用でき、新しいロガーを有効にする前にリダイレクトされた標準出力を使用していないことを確認します。on環境チェックをスキップし、ターミナル のログ記録を有効にします。off環境チェックをスキップし、既定のコンソール ロガーを使用します。ターミナル ロガーには、復元フェーズとビルド フェーズが表示されます。 各フェーズでは、現在ビルド中のプロジェクトがターミナルの下部に表示されます。 ビルドしている各プロジェクトは、現在ビルドされている MSBuild ターゲットと、そのターゲットに費やされた時間の両方を出力します。 この情報を検索して、ビルドの詳細を確認できます。 プロジェクトのビルドが完了すると、次の内容をキャプチャする "ビルド完了" セクションが 1 つ書き込まれます。
- ビルドされたプロジェクトの名前。
- ターゲット フレームワーク (マルチターゲットの場合)。
- そのビルドの状態。
- そのビルドの主な出力 (ハイパーリンク)。
- そのプロジェクトに対して生成されたすべての診断。
このオプションは、.NET 8 以降で使用できます。
--ucr|--use-current-runtime現在のランタイムをターゲット ランタイムとして使用します。
-v|--verbosity <LEVEL>コマンドの詳細レベルを設定します。 使用できる値は、
q[uiet]、m[inimal]、n[ormal]、d[etailed]、およびdiag[nostic]です。 既定値はminimalです。 詳細については、LoggerVerbosityを参照してください。
--version-suffix <VERSION_SUFFIX>プロジェクト ファイルのバージョン フィールドのアスタリスク (
*) を置き換えるバージョン サフィックスを定義します。
-?|-h|--helpコマンドの使用方法の説明を出力します。
例
現在のディレクトリにプロジェクトの フレームワーク依存のクロスプラットフォーム バイナリ を作成します。
dotnet publish.NET Core 3.0 SDK 以降では、この例では、現在のプラットフォーム用の フレームワークに依存する実行可能ファイル も作成します。
特定のランタイムに対して、現在のディレクトリ内のプロジェクトの 自己完結型実行可能ファイル を作成します。
dotnet publish --runtime osx-x64RID はプロジェクト ファイルに含まれている必要があります。
特定のプラットフォームに対して、現在のディレクトリ内のプロジェクトに対して、フレームワークに依存する 実行可能ファイルの を作成します。
dotnet publish --runtime osx-x64 --self-contained falseRID はプロジェクト ファイルに含まれている必要があります。 この例は、.NET Core 3.0 SDK 以降のバージョンに適用されます。
特定のランタイムとターゲット フレームワークのプロジェクトを現在のディレクトリに発行します。
dotnet publish --framework net8.0 --runtime osx-x64指定したプロジェクト ファイルを発行します。
dotnet publish ~/projects/app1/app1.csproj現在のアプリケーションを発行しますが、プロジェクト間 (P2P) 参照は復元せず、復元操作中はルート プロジェクトのみを復元します。
dotnet publish --no-dependencies現在のディレクトリにファイル ベースの C# プログラム app.cs を発行します。
dotnet publish app.cs.NET SDK 10.0.100 でファイル ベースのプログラムサポートが追加されました。
関連項目
- .NET アプリケーションの発行の概要
- ターゲット フレームワーク の
- ランタイム識別子 (RID) カタログ
- dotnet 発行 を使用して .NET アプリをコンテナー化する
- macOS Catalina Notarization の使用
- 発行されたアプリケーション のディレクトリ構造の
- MSBuild コマンド ライン リファレンス の
- ASP.NET Core アプリの展開 用の Visual Studio 発行プロファイル (.pubxml) を
する - dotnet msbuild を
する - 自己完結型デプロイ をトリミングする
.NET