dotnet build

この記事の対象: ✔️ .NET Core 3.1 SDK 以降のバージョン

名前

dotnet build - プロジェクトとそのすべての依存関係をビルドします。

構文

dotnet build [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [-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 コマンドは、プロジェクトとその依存関係をバイナリ セットにビルドします。 バイナリには、拡張子が *.dll* である中間言語 (IL) ファイルのプロジェクトのコードが含まれます。 プロジェクトの種類と設定に応じて、次などのファイルを含めることもできます。

  • プロジェクトの種類が .NET Core 3.0 以降を対象とする実行可能ファイルである場合、アプリケーションの実行に使用できる実行可能ファイル。
  • 拡張子が *.pdb* であるデバッグに使用されるシンボル ファイル。
  • アプリケーションまたはライブラリの依存関係が列挙されている *.deps.json* ファイル。
  • アプリケーションの共有ランタイムとそのバージョンを指定する、 *.runtimeconfig.json* ファイル。
  • (プロジェクト参照または NuGet パッケージの参照を介して) プロジェクトが依存する他のライブラリ。

.NET Core 3.0 より前のバージョンを対象とする実行可能なプロジェクトでは、NuGet からのライブラリの依存関係は、通常出力フォルダーにコピーされません。 これらは、実行時に NuGet グローバル パッケージ フォルダーで解決されます。 この点を考慮すると、`dotnet build` の生成物は別のコンピューターに転送して実行することはできません。 展開できるアプリケーションのバージョンを作成するには、(たとえば、[dotnet publish](dotnet-publish.md) コマンドを使用して) アプリケーションを発行する必要があります。 詳細については、[.NET アプリケーションの展開](../deploying/index.md)に関する記事を参照してください。

.NET Core 3.0 以降を対象とする実行可能なプロジェクトでは、ライブラリの依存関係は出力フォルダーにコピーされます。 つまり、(Web プロジェクトなどが持つ) 発行専用のロジックが他にない場合、ビルドの出力は展開できるはずです。

暗黙的な復元

ビルドには *project.assets.json* ファイルが必要です。このファイルには、アプリケーションの依存関係が一覧表示されています。 このファイルは、dotnet restore を実行すると作成されます。 アセット ファイルが配置されていないと、ツールは参照アセンブリを解決できないため、エラーになります。

復元を必要とするすべてのコマンド (dotnet newdotnet builddotnet rundotnet testdotnet publishdotnet pack など) によって暗黙的に実行されるため、dotnet restore を実行する必要がなくなりました。 暗黙的な復元を無効にするには、--no-restore オプションを使用します。

dotnet restoreなどの、明示的な復元が意味のある一部のシナリオや、復元が行われるタイミングを明示的に制御する必要があるビルド システムでは、dotnet restore は引き続き有用なコマンドです。

NuGet フィードの管理方法については、dotnet restore のドキュメントをご覧ください。

このコマンドには dotnet restore オプションを指定できますが、--source のように長い形式で指定する必要があります。 -s のような短い形式のオプションはサポートされていません。

実行可能ファイルまたはライブラリ出力

プロジェクトを実行できるかどうかは、プロジェクト ファイルの `` プロパティで決まります。 次の例は、実行可能なコードを生成するプロジェクトを示しています。

<PropertyGroup>
  <OutputType>Exe</OutputType>
</PropertyGroup>

ライブラリを生成するには、`` プロパティを省略するか、その値を `Library` に変更します。 ライブラリの IL DLL にはエントリ ポイントが含まれず、実行できません。

MSBuild

`dotnet build` では MSBuild を使用してプロジェクトをビルドするため、並列ビルドとインクリメンタル ビルドの両方がサポートされます。 詳しくは、「[インクリメンタル ビルド](/visualstudio/msbuild/incremental-builds)」を参照してください。

このオプションに加え、`dotnet build` コマンドは、プロパティを設定する `-p` やロガーを定義する `-l` などの MSBuild オプションも受け入れます。 これらのオプションの詳細については、「[MSBuild コマンド ライン リファレンス](/visualstudio/msbuild/msbuild-command-line-reference)」を参照してください。 また、[dotnet msbuild](dotnet-msbuild.md) コマンドを使用することもできます。

注意

`dotnet build``dotnet run` によって自動的に実行される場合、`-property:property=value` のような引数は考慮されません。

`dotnet build` を実行することは、`dotnet msbuild -restore` を実行することと同じです。ただし、出力の既定の詳細度は異なります。

ワークロード マニフェストのダウンロード

このコマンドを実行すると、ワークロードの広告マニフェストの非同期バックグラウンド ダウンロードが開始されます。 このコマンドが終了してもダウンロードが実行されている場合、ダウンロードは停止します。 詳細については、「広告マニフェスト」を参照してください。

引数

PROJECT | SOLUTION

ビルドするプロジェクトまたはソリューションのファイル。 プロジェクトまたはソリューションのファイルを指定しない場合、MSBuild は、現在の作業ディレクトリから *proj* または *sln* のどちらかで終わるファイル拡張子を持つファイルを検索して、そのファイルを使います。

オプション

  • -a|--arch <ARCHITECTURE>

    ターゲット アーキテクチャを指定します。 これは、ランタイム識別子 (RID) を設定する簡単な構文です。指定した値は、既定の RID と組み合わされます。 たとえば、win-x64 マシンで --arch x86 と指定すると、RID は win-x86 に設定されます。 このオプションを使用する場合は、-r|--runtime オプションは使用しないでください。 .NET 6 Preview 7 以降で利用できます。

  • -c|--configuration <CONFIGURATION>

    ビルド構成を定義します。 ほとんどのプロジェクトの既定値は Debug ですが、プロジェクトでビルド構成設定をオーバーライドできます。

  • --disable-build-servers

    永続的なビルド サーバーを強制的に無視してコマンドを実行します。 このオプションは、一貫してビルド キャッシュの使用をすべて無効にし、ゼロからのビルドを強制する手段として使用できます。 キャッシュに依存しないビルドを実行することは、キャッシュが何らかの理由で破損したか不正確な内容になった可能性がある場合に役立ちます。 .NET 7 SDK 以降で使用できます。

  • -f|--framework <FRAMEWORK>

    特定のフレームワーク用にコンパイルします。 フレームワークは、[プロジェクト ファイル](../project-sdk/overview.md)で定義する必要があります。 例: net7.0net462

  • --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 を使います。 詳細については、LoggerVerbosityWarningLevel に関する記事を参照してください。

  • --use-current-runtime, --ucr [true|false]

    RuntimeIdentifier をいずれかのマシンに基づいてプラットフォームの移植可能な RuntimeIdentifier に設定します。 これは、SelfContainedPublishAotPublishSelfContainedPublishSingleFilePublishReadyToRun などの 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
    
  • -pMSBuild オプションを使用してプロジェクトをビルドし、バージョン 1.2.3.4 をビルド パラメーターとして設定します。

    dotnet build -p:Version=1.2.3.4