dotnet build
この記事の対象: ✔️ .NET Core 3.1 SDK 以降のバージョン
名前
dotnet build
- プロジェクトとそのすべての依存関係をビルドします。
構文
dotnet build [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [-f|--framework <FRAMEWORK>]
[--disable-build-servers]
[--force] [--interactive] [--no-dependencies] [--no-incremental]
[--no-restore] [--nologo] [--no-self-contained] [--os <OS>]
[-o|--output <OUTPUT_DIRECTORY>]
[-p|--property:<PROPERTYNAME>=<VALUE>]
[-r|--runtime <RUNTIME_IDENTIFIER>]
[--self-contained [true|false]] [--source <SOURCE>]
[--tl:[auto|on|off]] [--use-current-runtime, --ucr [true|false]]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet build -h|--help
説明
dotnet build
コマンドは、プロジェクトとその依存関係をバイナリ セットにビルドします。 バイナリには、拡張子が
- プロジェクトの種類が .NET Core 3.0 以降を対象とする実行可能ファイルである場合、アプリケーションの実行に使用できる実行可能ファイル。
- 拡張子が
* .pdb* であるデバッグに使用されるシンボル ファイル。 - アプリケーションまたはライブラリの依存関係が列挙されている
* .deps.json* ファイル。 - アプリケーションの共有ランタイムとそのバージョンを指定する、
* .runtimeconfig.json* ファイル。 - (プロジェクト参照または NuGet パッケージの参照を介して) プロジェクトが依存する他のライブラリ。
.NET Core 3.0 より前のバージョンを対象とする実行可能なプロジェクトでは、NuGet からのライブラリの依存関係は、通常出力フォルダーにコピーされません。 これらは、実行時に NuGet グローバル パッケージ フォルダーで解決されます。 この点を考慮すると、
.NET Core 3.0 以降を対象とする実行可能なプロジェクトでは、ライブラリの依存関係は出力フォルダーにコピーされます。 つまり、(Web プロジェクトなどが持つ) 発行専用のロジックが他にない場合、ビルドの出力は展開できるはずです。
暗黙的な復元
ビルドには dotnet restore
を実行すると作成されます。 アセット ファイルが配置されていないと、ツールは参照アセンブリを解決できないため、エラーになります。
復元を必要とするすべてのコマンド (dotnet new
、dotnet build
、dotnet run
、dotnet test
、dotnet publish
、dotnet pack
など) によって暗黙的に実行されるため、dotnet restore
を実行する必要がなくなりました。 暗黙的な復元を無効にするには、--no-restore
オプションを使用します。
dotnet restore
などの、明示的な復元が意味のある一部のシナリオや、復元が行われるタイミングを明示的に制御する必要があるビルド システムでは、dotnet restore
は引き続き有用なコマンドです。
NuGet フィードの管理方法については、dotnet restore
のドキュメントをご覧ください。
このコマンドには dotnet restore
オプションを指定できますが、--source
のように長い形式で指定する必要があります。 -s
のような短い形式のオプションはサポートされていません。
実行可能ファイルまたはライブラリ出力
プロジェクトを実行できるかどうかは、プロジェクト ファイルの
<PropertyGroup>
<OutputType>Exe</OutputType>
</PropertyGroup>
ライブラリを生成するには、
MSBuild
このオプションに加え、
注意
ワークロード マニフェストのダウンロード
このコマンドを実行すると、ワークロードの広告マニフェストの非同期バックグラウンド ダウンロードが開始されます。 このコマンドが終了してもダウンロードが実行されている場合、ダウンロードは停止します。 詳細については、「広告マニフェスト」を参照してください。
引数
PROJECT | SOLUTION
ビルドするプロジェクトまたはソリューションのファイル。 プロジェクトまたはソリューションのファイルを指定しない場合、MSBuild は、現在の作業ディレクトリから
オプション
-a|--arch <ARCHITECTURE>
ターゲット アーキテクチャを指定します。 これは、ランタイム識別子 (RID) を設定する簡単な構文です。指定した値は、既定の RID と組み合わされます。 たとえば、
win-x64
マシンで--arch x86
と指定すると、RID はwin-x86
に設定されます。 このオプションを使用する場合は、-r|--runtime
オプションは使用しないでください。 .NET 6 Preview 7 以降で利用できます。
--artifacts-path <ARTIFACTS_DIR>
実行されたコマンドからのすべてのビルド出力ファイルは、指定されたパスの下のサブフォルダーに配置され、プロジェクトで区切られます。 詳細については、「 Artifacts 出力レイアウトを参照してください。 .NET 8 SDK 以降で利用可能です。
-c|--configuration <CONFIGURATION>
ビルド構成を定義します。 ほとんどのプロジェクトの既定値は
Debug
ですが、プロジェクトでビルド構成設定をオーバーライドできます。
--disable-build-servers
永続的なビルド サーバーを強制的に無視してコマンドを実行します。 このオプションは、一貫してビルド キャッシュの使用をすべて無効にし、ゼロからのビルドを強制する手段として使用できます。 キャッシュに依存しないビルドを実行することは、キャッシュが何らかの理由で破損したか不正確な内容になった可能性がある場合に役立ちます。 .NET 7 SDK 以降で使用できます。
-f|--framework <FRAMEWORK>
特定のフレームワーク用にコンパイルします。 フレームワークは、
[ プロジェクト ファイル](../project-sdk/overview.md) で定義する必要があります。 例:net7.0
、net462
。--force
最後の復元が成功した場合でも、すべての依存関係が強制的に解決されます。 このフラグを指定することは、project.assets.json ファイルを削除することと同じです。
-?|-h|--help
コマンドの使用方法を示した説明を出力します。
--interactive
コマンドを停止して、ユーザーの入力または操作のために待機させることができます。 たとえば、認証を完了する場合があります。 .NET Core 3.0 SDK 以降で使用できます。
--no-dependencies
プロジェクト間 (P2P) 参照を無視し、指定されたルート プロジェクトのみをビルドします。
--no-incremental
インクリメンタル ビルドとして安全でないビルドをマークします。 このフラグにより、インクリメンタル コンパイルは無効になり、プロジェクトの依存関係グラフのクリーン再ビルドが強制的に行われます。
--no-restore
ビルド時に暗黙的な復元は実行されません。
--nologo
著作権情報を表示しません。
--no-self-contained
フレームワーク依存のアプリケーションとしてアプリケーションを発行します。 アプリケーションを実行するには、互換性のある .NET ランタイムをターゲット マシンにインストールする必要があります。 .NET 6 SDK 以降で利用可能です。
-o|--output <OUTPUT_DIRECTORY>
ビルド済みバイナリを配置するディレクトリ。 指定しない場合、既定のパスは
./bin/<configuration>/<framework>/
になります。 (TargetFrameworks
プロパティを使用した) ターゲット フレームワークが複数あるプロジェクトの場合は、このオプションを指定するときに--framework
も定義する必要があります。.NET 7.0.200 SDK 以降
ソリューションでこのコマンドを実行するときに
--output
オプションを指定すると、出力パスの不明なセマンティクスが原因で、CLI から警告 (7.0.200 のエラー) が出力されます。 このオプションは、ビルドされたすべてのプロジェクトのすべての出力が指定されたディレクトリにコピーされるため、この--output
オプションは許可されません。これは、複数のターゲットを持つプロジェクトと、直接および推移的依存関係の異なるバージョンを持つプロジェクトと互換性がありません。 詳しくは、「ソリューション レベルの--output
オプションがビルド関連コマンドで無効に」を参照してください。
--os <OS>
ターゲット オペレーティング システム (OS) を指定します。 これは、ランタイム識別子 (RID) を設定する簡単な構文です。指定した値は、既定の RID と組み合わされます。 たとえば、
win-x64
マシンで--os linux
と指定すると、RID はlinux-x64
に設定されます。 このオプションを使用する場合は、-r|--runtime
オプションは使用しないでください。 .NET 6 以降で使用可能です。
-p|--property:<PROPERTYNAME>=<VALUE>
1 つ以上の MSBuild プロパティを設定します。 複数のプロパティを指定するには、セミコロンで区切るか、オプションを繰り返します。
--property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2> --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
-r|--runtime <RUNTIME_IDENTIFIER>
ターゲットのランタイムを指定します。 ランタイム ID (RID) の一覧については、RID カタログに関するページをご覧ください。 .NET 6 SDK でこのオプションを使用する場合は、
--self-contained
または--no-self-contained
も同時に使用してください。 指定しない場合、既定では現在の OS とアーキテクチャ用にビルドされます。--self-contained [true|false]
アプリケーションと併せて .NET ランタイムを発行します。これにより、ランタイムをターゲット コンピューターにインストールする必要がなくなります。 ランタイム識別子が指定されている場合、既定値は
true
です。 .NET 6 以降で使用可能です。--source <SOURCE>
復元操作時に使用する NuGet パッケージ ソースの URI。
--tl:[auto|on|off]
ビルド出力にターミナル ロガーを使用するかどうかを指定します。 既定値は、ターミナル ログを有効にする前にまず環境を確認する、
auto
です。 環境チェックでは、ターミナルが最新の出力機能を使用でき、新しいロガーを有効にする前にリダイレクトされる標準出力を使用していないことを確認します。on
は、環境チェックをスキップし、ターミナル ログを有効にします。off
は、環境チェックをスキップし、既定のコンソール ロガーを使用します。ターミナル ロガーには、復元フェーズとそれに続くビルド フェーズが表示されます。 各フェーズにおいて、現在ビルド中のプロジェクトがターミナルの下部に表示されます。 ビルド中の各プロジェクトに対し、現在ビルド中の MSBuild ターゲットとそのターゲットに費やされた時間の両方が出力されます。 ビルドの詳細は、この情報を検索して確認できます。 プロジェクトのビルドが完了すると、次がキャプチャされた 1 つの "ビルドが完了しました" セクションが書き込まれます。
- ビルドされたプロジェクトの名前。
- ターゲット フレームワーク (複数ターゲットの場合)。
- そのビルドの状態。
- そのビルドの主な出力 (ハイパーリンク付き)。
- そのプロジェクトに対して生成された診断。
このオプションは、.NET 8 以降で使用できます。
-v|--verbosity <LEVEL>
コマンドの詳細レベルを設定します。 指定できる値は、
q[uiet]
、m[inimal]
、n[ormal]
、d[etailed]
、およびdiag[nostic]
です。 既定値は、minimal
です。 既定では、MSBuild ではすべての詳細レベルで警告とエラーが表示されます。 警告を除外するには、/property:WarningLevel=0
を使います。 詳細については、LoggerVerbosity と WarningLevel に関する記事を参照してください。--use-current-runtime, --ucr [true|false]
RuntimeIdentifier
をいずれかのマシンに基づいてプラットフォームの移植可能なRuntimeIdentifier
に設定します。 これは、SelfContained
、PublishAot
、PublishSelfContained
、PublishSingleFile
、PublishReadyToRun
などのRuntimeIdentifier
を必要とするプロパティにより暗黙的に発生します。 プロパティが false に設定されていると、その暗黙の解決は発生しなくなります。--version-suffix <VERSION_SUFFIX>
プロジェクトをビルドするときに使用する
`$(VersionSuffix)` プロパティの値を設定します。 これは、`$(Version)` プロパティが設定されていない場合にのみ機能します。 次に、`$(Version)` には、ダッシュで区切り`$(VersionSuffix)` と組み合わせた`$(VersionPrefix)` が設定されます。
使用例
プロジェクトとその依存関係をビルドします。
dotnet build
リリース構成を使用して、プロジェクトとその依存関係をビルドします。
dotnet build --configuration Release
特定のランタイム (この例では Linux) のプロジェクトとその依存関係をビルドします。
dotnet build --runtime linux-x64
プロジェクトをビルドし、復元操作中に指定した NuGet パッケージ ソースを使用します。
dotnet build --source c:\packages\mypackages
-p
MSBuild オプションを使用してプロジェクトをビルドし、バージョン 1.2.3.4 をビルド パラメーターとして設定します。dotnet build -p:Version=1.2.3.4
.NET