MSBuild 命令列參考
在使用 MSBuild.exe 來建置專案或方案檔時,您可以包含數個參數來指定程序的各個層面。
每個參數都以兩種形式提供:-switch 和 /switch。 本文件僅示範 -switch 形式。 參數不區分大小寫。 如果您從命令提示字元以外的殼層執行 Windows MSBuild,則參數 ( (以分號或逗號分隔的參數清單,) 可能需要單引號或雙引號,以確保清單會傳遞至MSBuild,而不是由殼層解譯。
語法
MSBuild.exe [Switches] [ProjectFile]
引數
| 引數 | 描述 |
|---|---|
ProjectFile |
在所指定的專案檔中建置目標。 如果您未指定專案檔,MSBuild 會搜尋目前工作目錄中結尾為 proj 的檔案名稱副檔名,並使用該檔案。 您也可以為這個引數指定 Visual Studio 方案檔。 |
交換器
| 交換器 | 簡短形式 | 描述 |
|---|---|---|
-detailedSummary[: True 或 False ] |
-ds[: True 或 False ] |
如果 True 為 ,請在組建記錄檔結尾顯示已建置的組態及其排程至節點的詳細資訊。 |
-graphBuild[: True 或 False ] |
-graph[: True 或 False ] |
導致MSBuild建構和建置專案圖形。 建構圖表牽涉到識別表單相依性的專案參考。 建置該圖形牽涉到嘗試在參考專案的專案之前建置專案參考,與傳統MSBuild排程不同。 需要MSBuild 16 或更新版本。 |
| -help | /? 或 -h | 顯示使用資訊。 下列命令是範例:msbuild.exe -? |
-ignoreProjectExtensions: extensions |
-ignore: extensions |
決定要建置哪個專案檔後,請忽略指定的副檔名。 使用分號或逗號分隔多個副檔名,如下列範例所示:-ignoreprojectextensions:.vcproj,.sln |
-interactive[: True 或 False ] |
- | 表示允許組建中的動作與使用者互動。 請勿在非預期互動性的自動化案例中使用這個引數。 指定 -interactive 與指定 -interactive:true 相同。 使用 參數覆寫來自回應檔的值。 |
-isolateProjects[: True 或 False ] |
-isolate[: True 或 False ] |
造成MSBuild以隔離方式建置每個專案。 這是更嚴格的MSBuild模式,因為它需要在評估階段以靜態方式探索專案圖形,但可以改善排程,並減少建置大型專案集時的記憶體額外負荷。 |
-maxCpuCount[: number ] |
-m[:number] |
指定要在建置時使用的並行處理最大數目。 如果您未包含此參數,預設值為 1。 如果您包含此參數但未指定值,MSBuild 將會使用電腦上的處理器最大數目。 如需詳細資訊,請參閱同時建置多個專案。 下列範例會指示 MSBuild 使用三個 MSBuild 處理程序來建置,這可在同一時間建置三個專案: msbuild myproject.proj -maxcpucount:3 |
| -noAutoResponse | -noautorsp | 不要自動包含任何 MSBuild.rsp 檔案。 |
-nodeReuse:value |
-nr:value |
啟用或停用 MSBuild 節點的重複使用功能。 您可以指定下列值: - True。 組建完成後保留節點,以便後續組建可以加以使用 (預設值)。 - False。 在組建完成後不保留節點。 節點對應至執行中專案。 如果您包含 -maxcpucount 參數,就能同時執行多個節點。 |
| -nologo | 不要顯示程式啟始資訊或著作權訊息。 | |
-preprocess[: filepath ] |
-pp[:filepath] |
由內嵌在組建期間匯入的所有檔案,並標上其界限標記,藉此建立單一彙總的專案檔。 您可以使用此參數更輕鬆地判斷正在匯入哪些檔案、從哪裡匯入檔案,以及哪些檔案形成組建。 使用這個參數時,並不會建置專案。 如果您指定 filepath,則彙總的專案檔會是檔案的輸出。 否則,輸出會顯示在主控台視窗中。如需如何使用 Import 項目來將專案檔插入另一個專案檔的資訊,請參閱 Import 項目 (MSBuild) 和如何:在多個專案檔中使用相同的目標。 |
| -outputResultsCache[:cacheFile] | -orc[:cacheFile] | 輸出快取檔案,其中MSBuild會在建置結束時寫入其建置結果快取的內容。 設定此設定也會開啟隔離的組建 (隔離) 。 |
-profileEvaluation:<file> |
- | 設定檔MSBuild評估,並將結果寫入指定的檔案。 如果指定檔案的副檔名為 '.md',則會以 Markdown 格式產生結果。 否則,會產生定位字元分隔的檔案。 |
-property:name=value |
-p:name=value |
設定或覆寫所指定的專案層級屬性,其中 name 是屬性名稱,而 value 是屬性值。 分別指定每個屬性,或使用分號或逗號分隔多個屬性,如下列範例所示:-property:WarningLevel=2;OutDir=bin\Debug |
| -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:3.5使用此參數,即可建置專案,並指定有別於 Project 項目 (MSBuild) 中所指定的版本。 如需詳細資訊,請參閱覆寫 ToolsVersion 設定。 若是 MSBuild 4.5,您可以為 version 指定下列值:2.0、3.5 和 4.0。 如果您指定 4.0,則 VisualStudioVersion 組建屬性會指定要使用哪個子工具組。 如需詳細資訊,請參閱工具組 (ToolsVersion) 的<子工具組>一節。工具組包含用於建置應用程式的工作、目標和工具。 工具包括編譯器,例如 csc.exe 和 vbc.exe。 如需工具組的詳細資訊,請參閱工具組 (ToolsVersion)、標準和自訂工具組的組態及多目標。 注意:工具組版本與目標架構不同,這是建置專案執行所在.NET Framework的版本。 如需詳細資訊,請參閱目標 Framework 和目標平台。 |
-validate:[schema] |
-val[schema] |
驗證專案檔,如果驗證成功,則會建置專案。 如果您沒有指定 schema,專案會針對預設結構描述進行驗證。如果您指定 schema,專案會針對您指定的結構描述進行驗證。下列設定為範例: -validate:MyExtendedBuildSchema.xsd |
-verbosity:level |
-v:level |
指定要在組建記錄檔中顯示的資訊量。 每個記錄器都會顯示根據您為該記錄器所設詳細資訊層級的事件。 您可以指定下列詳細資訊層級: q[uiet] 、、 m[inimal] (n[ormal] 預設) 、 d[etailed] 、 和 diag[nostic] 。下列設定為範例: -verbosity:quiet |
| -version | -ver | 只顯示版本資訊。 不會建置專案。 |
@file |
從文字檔中插入命令列參數。 如果您有多個檔案,請個別指定。 如需詳細資訊,請參閱回應檔。 | |
-warnAsError[: code [ ;code2 ] |
-err[ :code [ ;code2 ] |
要視為錯誤的警告碼清單。 使用分號或逗號分隔多個警告碼。 若要將所有警告視為錯誤,請使用不含值的 參數。 當警告視為錯誤時,目標會繼續執行,就像是警告一樣,但整體建置失敗。 範例: -err:MSB4130 |
-warnNotAsError[: code [ ;code2 ] |
-noerr[ :code [ ;code2 ] |
不應升階為錯誤的警告碼清單。 具體而言,如果 warnAsError 參數設定為將所有警告升級為錯誤,則不會升級以 warnNotAsError 指定的錯誤碼。 如果 warnAsError 未設定為將所有警告升階為錯誤,則不會有任何作用。 使用分號或逗號分隔多個警告碼。 範例: -noerr:MSB4130 |
-warnAsMessage[: code [ ;code2 ] |
-noWarn[: code [ ;code2 ] |
要視為低重要性訊息的警告代碼清單。 使用分號或逗號分隔多個警告碼。 範例: -noWarn:MSB3026 |
記錄器的參數
| 交換器 | 簡短形式 | 描述 |
|---|---|---|
-binaryLogger[:[LogFile=]output.binlog[;ProjectImports=[None,Embed,ZipFile]]] |
-bl | 將所有建置事件序列化為壓縮的二進位檔案。 根據預設,檔案位於目前目錄中,並命名為 msbuild.binlog。 二進位記錄是建置程序的詳細描述,稍後可用來重構文字記錄並供其他分析工具所使用。 二進位記錄通常是 10-20x 小於最詳細的文字診斷層級記錄,但包含詳細資訊。 二進位記錄器預設會收集專案檔的來源文字,包含在建置期間發生的所有已匯入的專案和目標檔案。 選擇性 ProjectImports 參數控制此行為:- ProjectImports=None. 不收集專案匯入。 - ProjectImports=Embed. 在記錄檔中內嵌專案匯入 (預設值)。 - ProjectImports=ZipFile. 將專案檔儲存至< output.projectimports.zip其中輸出 >與二進位記錄檔名稱相同。 >< ProjectImports 的預設設定為 Embed。 注意:記錄器不會收集非 MSBuild 原始程式檔,例如 .cs、.cpp 等。 「播放」.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 |
將您所指定的參數傳遞至主控台記錄器,其會在主控台視窗中顯示組建資訊。 您可以指定下列參數: - PerformanceSummary。 顯示工作、目標及專案所花費的時間。 - 摘要。 在結尾顯示錯誤和警告摘要。 - NoSummary。 不要在結尾顯示錯誤和警告摘要。 - ErrorsOnly。 僅顯示錯誤。 - WarningsOnly。 僅顯示警告。 - NoItemAndPropertyList。 如果詳細資訊層級設為 diagnostic,不要在每個專案組件開頭顯示項目和屬性的清單。- ShowCommandLine。 顯示 TaskCommandLineEvent 訊息。- ShowProjectFile。 在診斷訊息中顯示專案檔的路徑。 此設定預設為開啟。 - ShowTimestamp。 顯示時間戳記做為任何訊息的前置詞。 - ShowEventId。 顯示每個已啟動事件、已完成事件及訊息的事件識別碼。 - ForceNoAlign。 不要讓文字對齊主控台緩衝區的大小。 - DisableConsoleColor。 對所有記錄訊息使用預設的主控台色彩。 - DisableMPLogging。 在非多處理器模式中執行時,停用多處理器的輸出記錄樣式。 - EnableMPLogging。 即使在非多處理器模式中執行時也啟用多記錄器記錄樣式。 這個記錄樣式預設為開啟。 - 詳細資訊。 覆寫此記錄器的 -verbosity 設定。 使用分號分隔多個參數,如下列範例所示: -consoleloggerparameters:PerformanceSummary;NoSummary -verbosity:minimal預設主控台記錄器處於正常詳細資訊狀態,並包含 Summary 。 |
| -distributedFileLogger | -dfl | 將每個 MSBuild 節點的組建輸出記錄到自己的檔案。 這些檔案的初始位置是目前的目錄。 根據預設,檔案會命名為 MSBuild < NodeId.log >。 您可以使用 -fileLoggerParameters 參數,指定檔案位置及 fileLogger 的其他參數。 如果您使用 -fileLoggerParameters 參數為記錄檔命名,分散式記錄器會使用該名稱作為範本,並在為每個節點建立記錄檔時將節點識別碼附加至該名稱。 |
-distributedLogger:central loggerforwarding logger |
-dl:central loggerforwarding logger |
從 MSBuild 記錄事件,將不同的記錄器執行個體附加至每個節點。 若要指定多個記錄器,請分別指定每個記錄器。 您可以使用記錄器語法來指定記錄器。 如需記錄器語法,請參閱下方 的 -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。 如果您指定 ,輸出檔會命名為msbuild < n.log,其中 n >> 是 number 。 <number Number 可以是從 1 到 9 的數字。您可以使用 -fileLoggerParameters 參數來指定檔案的位置,以及 fileLogger 的其他參數。 |
-fileLoggerParameters[number]:parameters |
-flp[ number ]: parameters |
指定檔案記錄器和分散式檔案記錄器的任何額外參數。 此參數的存在表示對應的 -filelogger[number]參數存在。 Number 可以是從 1 到 9 的數字。您可以使用針對 -consoleloggerparameters列出的所有參數。 您也可以使用一個或多個下列參數: - LogFile。 要寫入組建記錄檔的記錄檔路徑。 分散式檔案記錄器會在這個路徑放上其記錄檔名稱做為前置詞。 - 附加。 決定是否要將組建記錄檔附加到記錄檔,或者加以覆寫。 在設定這個參數時,會將組建記錄檔附加至記錄檔。 若這個參數不存在,則會覆寫現有記錄檔的內容。 範例: 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- 編碼。 指定檔案的編碼 (例如,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 使用下列語法:[``LoggerClass``,]``LoggerAssembly``[;``LoggerParameters``]針對 LoggerClass 使用下列語法:[``PartialOrFullNamespace``.]``LoggerClassName如果組件恰好包含一個記錄器,就不必指定記錄器類別。 針對 LoggerAssembly 使用下列語法:{``AssemblyName``[,``StrongName``] |AssemblyFile``}記錄器參數是選擇性,只有在輸入時才會傳遞至記錄器。 下列範例使用 -logger 參數。 -logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral-logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML |
| -noConsoleLogger | -noconlog | 停用預設主控台記錄器,而且不將事件記錄至主控台。 |
範例 1
下列範例會建置 rebuild 專案的 MyProject.proj 目標。
MSBuild.exe MyProject.proj -t:rebuild
範例 2
您可以使用 MSBuild.exe 來執行更複雜的組建。 例如,您可以用來在方案中建置特定專案的特定目標。 下列範例會重建 NotInSolutionFolder 專案並清除 InSolutionFolder 專案,這會位於 NewFolder 方案資料夾中。
msbuild SlnFolders.sln -t:NotInSolutionfolder:Rebuild;NewFolder\InSolutionFolder:Clean