MSBuild コマンド ライン リファレンス

MSBuild.exe を使用してプロジェクト ファイルやソリューション ファイルをビルドするとき、スイッチをいくつか含めて、プロセスのさまざまな側面を指定できます。

すべてのスイッチは、 -switch/switchの 2 つの形式で利用できます。 このドキュメントでは、-switch の形式のみを示しています。 スイッチは大文字と小文字が区別されません。 Windows のコマンド プロンプト以外のシェルから MSBuild を実行する場合、スイッチの引数のリスト (セミコロンまたはコンマで区切る) は、リストがシェルで解釈されるのではなく MSBuild に渡されるようにするために、一重引用符または二重引用符で囲むことが必要な可能性があります。

.NET CLI コマンド dotnet ビルドdotnet publishdotnet msbuild 関連コマンドは、これらのスイッチを MSBuild に渡します。そのため、これらのコマンドを使用する場合は、このリファレンスが適用されますが、 dotnet run は適用されません。

構文

MSBuild.exe [Switches] [ProjectFile]

引数

Argument 説明
ProjectFile 指定したプロジェクト ファイル内でターゲットをビルドします。 プロジェクト ファイルを指定しない場合、MSBuild は、現在の作業ディレクトリからファイル名拡張子 proj を検索し、そのファイルを使用します。 この引数に Visual Studio ソリューション ファイルを指定することもできます。

スイッチ

次の表の最初の列は、各スイッチの長短の形式を示しています。 どちらの形式も同等です。

角かっこ [] 省略可能な部分を示し、中かっこ {}ユーザーが指定した値を示します。

Switch 説明
-detailedSummary[:{True or False}]

-ds[:{True or False}]
True の場合、ビルド ログの最後に、ビルドされた構成に関する詳細情報と、それらの構成がノードに対してどのようにスケジュールされているかが表示されます。
-getItem:{itemName,...} ビルドを実行せずに、評価後の 1 つ以上の項目の値を書き出します。または、-targets オプションまたは -getTargetResult オプションが使われている場合は、ビルド後に値を書き出します。
-getProperty:{propertyName,...} ビルドを実行せずに、評価後の 1 つ以上のプロパティの値を書き出します。または、-targets オプションまたは -getTargetResult オプションが使われている場合は、ビルド後に値を書き出します。
-getTargetResult:{targetName,...} 指定したターゲットの出力値を書き出します。
-graphBuild[:{True or False}]

-graph[:{True or False}]
MSBuild でプロジェクト グラフが作成およびビルドされるようにします。 グラフを作成するには、依存関係を形成するためのプロジェクト参照を識別する必要があります。 このグラフを構築するには、プロジェクト参照を、プロジェクトによって参照される前にビルドする必要があります。これは従来の MSBuild のスケジュールとは異なります。 MSBuild 16 以降が必要です。
-help

/? または -h
使用方法を表示します。 たとえば、次のようなコマンドになります。

msbuild.exe -?
-ignoreProjectExtensions: {extensions}

-ignore: {extensions}
ビルドするプロジェクト ファイルを決定するときに、指定した拡張子を無視します。 次の例に示すように、セミコロンまたはコンマを使用して複数の拡張子を区切ります。

-ignoreprojectextensions:.vcproj,.sln
-inputResultsCaches[:{cacheFile; ...}]

-irc[:{cacheFile; ...}]
MSBuild でビルド結果が読み取られる入力キャッシュ ファイルのセミコロン区切りの一覧。 -isolateProjectsFalse に設定されている場合は、これによって True に設定されます。
-interactive[:{True or False}] ビルド内のアクションがユーザーと対話できることを示します。 双方向性が期待されない自動化されたシナリオでは、この引数を使用しないでください。 -interactive を指定することは、-interactive:true を指定することと同じです。 このパラメーターは、応答ファイルから取得した値をオーバーライドするために使用します。
-isolateProjects[:{True, MessageUponIsolationViolation, False}]

-isolate[:{True, MessageUponIsolationViolation, False}]
MSBuild で各プロジェクトが分離されてビルドされます。 MessageUponIsolationViolation (またはその短い形式 Message) に設定されていると、-outputResultsCache スイッチが指定されている場合に、最上位レベルのターゲットからの結果のみがシリアル化されます。 このオプションは、副作用が考慮されないキャッシュされたターゲットへの依存関係により、依存関係プロジェクトで不適切な状態を使用する分離違反ターゲットの可能性を軽減することです。 (たとえば、プロパティの定義など)。このモードは、評価時にプロジェクト グラフを静的に検出できるようにする必要があるため、より制限が厳しくなっていますが、多数のプロジェクトをビルドする際のスケジュール設定を改善し、メモリオーバーヘッドを削減できます。
-lowPriority[:{True or False}]

-low[:{True or False}]
MSBuild が低いプロセス優先度で実行されるようにします。 -lowPriority を指定することは、-lowPriority:True を指定することと同じです。
-maxCpuCount[:{number}]

-m[:{number}]
ビルド時に使用する同時実行プロセスの最大数を指定します。 このスイッチが含まれていない場合、既定値は 1 です。 値を指定せずにこのスイッチを含める場合、MSBuild はコンピューター内のプロセッサの数まで使用します。 詳細については、「複数のプロジェクトの並行ビルド」を参照してください。

次の例では、MSBuild に対して 3 つの MSBuild プロセスを使用してビルドするように命令するため、3 つのプロジェクトを同時にビルドできます。

msbuild myproject.proj -maxcpucount:3
-noAutoResponse

-noautorsp
MSBuild.rsp または Directory.Build.rsp ファイルは自動的に含めないでください。
-nodeReuse:{value}

-nr:{value}
MSBuild ノードの再利用を有効または無効にします。 次の値を指定できます。

- True。 ビルドが完了した後もノードは維持され、後続のビルドでノードが再利用されます (既定値)。
- False。 ビルドの完了後、ノードは維持されません。

ノードは実行中のプロジェクトに対応します。 -maxcpucount スイッチを含める場合、複数のノードを同時に実行できます。
-nologo 著作権情報を表示しません。
-preprocess[:{filepath}]

-pp[:{filepath}]
ビルド中にインポートされるすべてのファイルをインライン展開することで、単一の集約されたプロジェクト ファイルを作成します。ファイルの境界にはマークが挿入されます。 このスイッチを使用して、インポートされるファイル、ファイルのインポート元、およびビルドに関連するファイルを簡単に特定できます。 このスイッチを使用した場合、プロジェクトはビルドされません。

filepath を指定した場合、集約されたプロジェクト ファイルがファイルに出力されます。 それ以外の場合は、出力がコンソール ウィンドウに表示されます。

Import 要素を使用してプロジェクト ファイルを他のプロジェクト ファイルに挿入する方法については、「Import 要素 (MSBuild)」と「方法:複数のプロジェクト ファイルで同じターゲットを使用する」を参照してください。
-outputResultsCache[:{cacheFile}]

-orc[:{cacheFile}]
MSBuild がビルドの最後にビルド結果キャッシュの内容を書き込む出力キャッシュ ファイル。 -isolateProjectsFalse に設定されている場合は、これによって True に設定されます。
profileEvaluation:{file} MSBuild の評価をプロファイルし、指定されたファイルに結果を書き込みます。 指定されたファイルの拡張子が ".md" の場合、結果は Markdown 形式で生成されます。 それ以外の場合は、タブ区切りのファイルが生成されます。
-property:{name}={value}

-p:{name}={value}
指定したプロジェクト レベルのプロパティを設定またはオーバーライドします。name はプロパティ名、value はプロパティ値です。 各プロパティを個別に指定するか、次の例に示すようにセミコロンまたはコンマを使用して複数のプロパティを区切ります。

-property:WarningLevel=2;OutDir=bin\Debug

一般的に使用されるプロパティの一覧についてはCommon MSBuild プロジェクトのプロパティを参照してください。 使用可能なプロパティの完全なセットは、プロジェクトの種類、SDK、インポートされたファイルによって異なります。
-restore

-r
実際のターゲットをビルドする前に、Restore ターゲットを実行します。
-restoreProperty:{name}={value}

-rp:{name}={value}
これらのプロジェクト レベルのプロパティは、復元時にのみ設定またはオーバーライドし、 -property 引数で指定されたプロパティは使用しないでください。 name はプロパティ名で、value はプロパティ値です。 セミコロンまたはコンマを使用して複数のプロパティを区切るか、各プロパティを個別に指定します。
-target:{targets}

-t:{targets}
プロジェクト内で指定されたターゲットをビルドします。 各ターゲットを個別に指定するか、次の例に示すようにセミコロンまたはコンマを使用して複数のターゲットを区切ります。

-target:PrepareResources;Compile

このスイッチを使用してターゲットを指定すると、プロジェクト ファイル内の DefaultTargets 属性のターゲットの代わりに実行されます。 詳細については、「ターゲットのビルド順序」と「方法:最初にビルドするターゲットを指定する」を参照してください。

ターゲットとは、タスクのグループを表します。 詳細については、ターゲット を参照してください。
-targets[:{file}]

-ts[:{file}]
実際にビルド プロセスを実行せずに、指定したファイル (またはファイルが指定されていない場合は出力デバイス) に使用可能なターゲットの一覧を書き込みます。
-toolsVersion:{version}

-tv:{version}
カスタム ツールセットを指定します。 ツールセットは、アプリケーションのビルドで使用するタスク、ターゲット、ツールで構成されます。 ツールセット (ToolsVersion) に関するページと「標準ツールセット構成とカスタム ツールセット構成」のページをご覧ください。
-validate:[{schema}]

-val[{schema}]
プロジェクト ファイルを検証し、成功した場合はプロジェクトをビルドします。

schema を指定しない場合、プロジェクトは既定のスキーマに対して検証されます。

schema を指定した場合、プロジェクトは指定したスキーマに対して検証されます。

たとえば、次のように設定します。-validate:MyExtendedBuildSchema.xsd
-verbosity:{level}

-v:{level}
ビルド ログに表示する情報量を指定します。 各 logger は、その logger に対して設定された詳細レベルに基づいてイベントを表示します。

詳細レベルには、q[uiet]m[inimal]n[ormal] (既定)、d[etailed]、および diag[nostic] を指定できます。

たとえば、次のように設定します。-verbosity:quiet
-version

-ver
バージョン情報だけを表示します。 プロジェクトはビルドされません。
@{file} テキスト ファイルからコマンドライン スイッチを挿入します。 複数ファイルがある場合は、それらを個別に指定します。 詳細については、「応答ファイル」を参照してください。
-warnAsError[:{code; ...}]

-err[:{code; ...}]
エラーとして扱う警告コードの一覧。 複数の警告コードを区切るには、セミコロンまたはコンマを使用します。 すべての警告をエラーとして扱うには、値を指定せずにスイッチを使用します。 警告がエラーとして扱われると、ターゲットは警告であるかのように実行され続けますが、全体的なビルドは失敗します。

例: -err:MSB4130
-warnNotAsError[:{code; ...}]

-noerr[:{code; ...}]
MSBuild 17.0 以降。 エラーに昇格すべきではない警告コードの一覧。 具体的には、warnAsError スイッチがすべての警告をエラーに昇格するように設定されている場合、warnNotAsError で指定されたエラー コードは昇格されません。 warnAsError がすべての警告をエラーに昇格するように設定されていない場合、これは無効です。 複数の警告コードを区切るには、セミコロンまたはコンマを使用します。

例: -noerr:MSB4130
-warnAsMessage[:{code}; ...}]

-noWarn[:{code; ...}]
重要度の低いメッセージとして扱う警告コードの一覧。 複数の警告コードを区切るには、セミコロンまたはコンマを使用します。

例 : -noWarn:MSB3026

ロガーのスイッチ

Switch 説明
-binaryLogger[:[LogFile=]{output.binlog}
[;ProjectImports=NoneEmbedZipFile]]

-bl[:[LogFile=]{output.binlog}
[;ProjectImports=NoneEmbedZipFile]]
すべてのビルド イベントをシリアル化し、バイナリ ファイルを作成します。 既定では、このファイルは現在のディレクトリに置かれ、名前は msbuild.binlog になります。 このバイナリ ログはビルド プロセスの詳しい説明であり、テキスト ログを再構築するために後で利用できます。また、他の分析ツールで利用できます。 バイナリ ログは通常、最も詳しいテキスト診断レベルのログの 10 分の 1 から 20 分の 1 のサイズになります。

既定のバイナリ ロガーはプロジェクト ファイルのソース テキストを収集します。ビルド中に見つけられた、すべてのインポート済みファイルとターゲット ファイルも収集されます。 省略可能な ProjectImports パラメーターは、この動作を制御します。

- ProjectImports=None プロジェクト インポートを収集しません。
- ProjectImports=Embed ログ ファイルにプロジェクト インポートを埋め込みます (既定)。
- ProjectImports=ZipFile プロジェクト ファイルを {output}.projectimports.zip に保存します。 <output> はバイナリ ログ ファイル名と同じ名前です。

ProjectImports の初期設定は Embed です。
: ロガーは、 .cs.cppなど、MSBuild 以外のソース ファイルを収集しません。
.binlog ファイルは、プロジェクト/ソリューションの代わりに引数として msbuild.exe に渡すことで "再生" できます。 他のロガーは、元のビルドが発生したかのようにログ ファイルに含まれる情報を受け取ります。 バイナリ ログとその使用法について詳しくは、 https://github.com/dotnet/msbuild/blob/main/documentation/wiki/Binary-Log.md をご覧ください

例:
- -bl
- -bl:output.binlog
- -bl:output.binlog;ProjectImports=None
- -bl:output.binlog;ProjectImports=ZipFile
- -bl:..\..\custom.binlog
- -binaryLogger
-consoleLoggerParameters:{parameters}

-clp:{parameters}
指定したパラメーターをコンソール logger に渡し、コンソール ウィンドウにビルド情報を表示します。 次のパラメーターを指定できます。

- PerformanceSummary。 タスク、ターゲット、およびプロジェクトで経過した時間を表示します。
- Summary。 エラーや警告の概要を終了時に表示します。
- NoSummary。 エラーや警告の概要を終了時に表示しません。
- ErrorsOnly。 エラーのみを表示します。
- WarningsOnly。 警告のみを表示します。
- NoItemAndPropertyList。 詳細レベルが diagnostic に設定されている場合、各プロジェクト ビルドの開始時に項目とプロパティの一覧を表示しません。
- ShowCommandLineTaskCommandLineEvent メッセージを表示します。
- ShowProjectFile。 診断メッセージにプロジェクト ファイルへのパスを表示します。 この設定は既定でオンになっています。
- ShowTimestamp。 タイムスタンプをメッセージの先頭に表示します。
- ShowEventId。 開始したイベント、終了したイベント、およびメッセージのイベント ID を表示します。
- ForceNoAlign。 テキストをコンソール バッファーのサイズに合わせません。
- DisableConsoleColor。 すべてのログ メッセージに、コンソールの既定の色を使用します。
- DisableMPLogging。 マルチプロセッサ以外のモードで実行されている場合にマルチプロセッサ ログ出力方法を無効にします。
- EnableMPLogging。 マルチプロセッサ以外のモードで実行されている場合でもマルチプロセッサ ログ出力方法を有効にします。 このログ出力方法はデフォルトで有効です。
- ForceConsoleColor。 コンソールでサポートされていない場合でも、ANSI コンソールの色を使用します。
- Verbosity。 このロガーの -verbosity 設定をオーバーライドします。

次の例に示すように、複数のパラメーターを区切るにはセミコロンを使用します。

-consoleloggerparameters:PerformanceSummary;NoSummary -verbosity:minimal

既定のコンソール ロガーは通常の詳細度で、Summary が含まれます。
-distributedFileLogger

-dfl
各 MSBuild ノードのビルド出力を、そのノード独自のファイルに記録します。 これらのファイルの初期位置は、現在のディレクトリです。 既定では、ファイルの名前は MSBuild{NodeId}.logです。 -fileLoggerParameters スイッチを使用して、fileLogger のファイルとその他のパラメーターの場所を指定できます。

-fileLoggerParameters スイッチを使用してログ ファイルに名前を付けると、分散ロガーはその名前をテンプレートとして使用し、ノードごとにログ ファイルを作成するときにその名前にノード ID を追加します。
-distributedLogger:{central logger},{forwarding logger}, ...

-dl:{central logger},{forwarding logger, ...}
MSBuild のイベントを記録して、各ノードに異なる logger インスタンスをアタッチします。 複数の logger を指定するには、各 logger を個別に指定します。

ロガー構文を使用してロガーを指定します。ただし、転送ロガーのクラスと追加のクラスを指定する必要があります。 ロガーの構文については、 -logger スイッチを参照してください。

このスイッチを使用する方法を次の例に示します。

-dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral

-dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll
-fileLogger[{number}]

-fl[{number}]
ビルド出力を、現在のディレクトリにある単一のファイルに記録します。 number を指定しない場合、出力ファイルの名前は msbuild.log になります。 number を指定した場合、出力ファイルの名前は msbuild<n>.log になります。ここで、<n> は number です。 Number は、1 から 9 までの数値を指定できます。

-fileLoggerParameters スイッチを使用して、fileLogger のファイルの場所とその他のパラメーターを指定できます。
-fileLoggerParameters[{number}]:

parameters

-flp[{number}]: {parameters}
ファイル logger と分散ファイル logger の追加のパラメーターを指定します。 このスイッチが存在することは、対応する -filelogger[number] スイッチが存在することを意味します。 Number は、1 から 9 までの数値を指定できます。

-consoleloggerparametersに一覧表示されているすべてのパラメーターを使用できます。 また、次のパラメーターを 1 つ以上使用することもできます。

- LogFile。 ビルド ログが書き込まれるログ ファイルへのパス。 分散ファイル logger では、このパスをログ ファイル名の先頭に追加します。
- Append。 ビルド ログを、ログ ファイルに追加して記録するか、ログ ファイルを上書きして記録するかについて指定します。 このスイッチを設定すると、ビルド ログはログ ファイルに追加して記録されます。 スイッチが存在しない場合、既存のログ ファイルの内容が上書きされます。
例: msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log;append
設定 true または false を明示的に含めると、設定に関係なくログが追加されます。 追加スイッチを含めない場合、ログは上書きされます。
この場合、ファイルは上書きされます。 msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log
この場合、ファイルが追加されます。 msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log;append=true
この場合、ファイルが追加されます。 msbuild myfile.proj -flp:FileLogger,Microsoft.Build;logfile=MyLog.log;append=false
- Encoding。 ファイルのエンコード (UTF-8、Unicode、ASCII など) を指定します。

次の例では、警告とエラー用に個別のログ ファイルを生成します。

-flp1:logfile=errors.txt;errorsonly -flp2:logfile=warnings.txt;warningsonly

次の例は、他の使用法を示しています:

-fileLoggerParameters:LogFile=MyLog.log;Append; Verbosity=diagnostic;Encoding=UTF-8

-flp:Summary;Verbosity=minimal;LogFile=msbuild.sum

-flp1:warningsonly;logfile=msbuild.wrn

-flp2:errorsonly;logfile=msbuild.err
-logger:logger

-l:logger
MSBuild からのイベントをログに記録する logger を指定します。 複数の logger を指定するには、各 logger を個別に指定します。

logger に対して次の構文を使用します。[LoggerClass,]LoggerAssembly[;LoggerParameters]

LoggerClass に対して次の構文を使用します。[PartialOrFullNamespace.]LoggerClassName

アセンブリに logger が 1 つしか含まれていない場合は、logger クラスを指定する必要はありません。

LoggerAssembly に対して次の構文を使用します。AssemblyName[,StrongName] \| AssemblyFile

logger のパラメーターは省略可能であり、入力されたとおりに logger に渡されます。

次の例では、 -logger スイッチを使用します。

-logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral

-logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML
-noConsoleLogger

-noconlog
既定のコンソール logger を無効にし、イベントのログをコンソールに記録しません。
-terminalLogger[:autoonoff]

-tl[:autoonoff]
終端ロガーを有効または無効にします。 ターミナル ロガーは、リアルタイムでコンソール上の強化されたビルド出力を提供し、プロジェクトごとに論理的に編成され、実用的な情報を強調表示するように設計されています。 標準出力がリダイレクトされない場合にのみターミナル ロガーを使用するには、 auto を指定します (または、引数を指定せずにオプションを使用します)。 出力を解析しないか、それ以外の場合は将来のバージョンで変更されずに使用しないでください。 このオプションは、MSBuild 17.8 以降で使用できます。

例 1

MyProject.proj プロジェクトの rebuild ターゲットをビルドする例を次に示します。

MSBuild.exe MyProject.proj -t:rebuild

例 2

MSBuild.exe を使用して、より複雑なビルドを実行できます。 たとえばそれを使用して、ソリューション内の特定のプロジェクトの特定のターゲットをビルドできます。 NotInSolutionFolder プロジェクトをリビルドし、NewFolder ソリューション フォルダー内にある InSolutionFolder プロジェクトを消去する例を次に示します。

msbuild SlnFolders.sln -t:NotInSolutionfolder:Rebuild;NewFolder\InSolutionFolder:Clean

関連項目