When you use MSBuild.exe to build a project or solution file, you can include several switches to specify various aspects of the process.
每一個參數都以兩種形式提供: -switch 和 /switch。 文件只顯示 -switch 表單。 參數不區分大小寫。 如果您從 Windows 命令提示字元以外的殼層執行 MSBuild,參數的自變數清單(以分號或逗號分隔)可能需要單引號或雙引號,以確保清單會傳遞至 MSBuild,而不是由殼層解譯。
The .NET CLI commands dotnet build, dotnet publish, dotnet msbuild and related commands pass these switches to MSBuild, so this reference is applicable when you use those commands; however dotnet run does not.
Syntax
MSBuild.exe [Switches] [ProjectFile]
Arguments
| Argument | Description |
|---|---|
ProjectFile |
在您指定的項目檔中建置目標。 If you don't specify a project file, MSBuild searches the current working directory for a file name extension that ends in proj and uses that file. 您也可以為此自變數指定 Visual Studio 方案檔。 在 Visual Studio 17.12 和更新版本中, .slnx 支援方案檔格式,以及 .sln 格式。
.sln相同解決方案的 和 .slnx 檔案都可以存在於相同的目錄中;如果兩者都存在,您必須明確指定其中一個檔案來建置解決方案。 |
Switches
下表中的第一個數據行顯示每個參數的長短格式。 這兩種表單都相等。
方括弧 [] 表示選擇性元件,大括弧 {}表示使用者提供的值。
| Switch | Description |
|---|---|
-detailedSummary[:{True or False}]-ds[:{True or False}] |
如果 True為 ,請在組建記錄的結尾顯示有關所建置組態及其排程方式至節點的詳細資訊。 |
-getItem:{itemName,...} |
在評估之後寫出專案或專案的值,而不執行建置,或者 -targets 如果使用 選項或 -getTargetResult 選項,請在建置之後寫出值。 |
-getProperty:{propertyName,...} |
在評估之後寫出屬性或屬性的值,而不執行建置,或者 -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 會從中讀取建置結果的輸入快取檔案分號分隔清單。 如果 -isolateProjects 設定為 False,這會將它設定為 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 使用三個 MSBuild 程式來建置,這可讓三個專案同時建置: msbuild myproject.proj -maxcpucount:3 |
-noAutoResponse-noautorsp |
Don't include any MSBuild.rsp or Directory.Build.rsp files automatically. |
-nodeReuse:{value}-nr:{value} |
啟用或停用 MSBuild 節點的重複使用。 您可以指定下列值: - True. 節點會在組建完成之後維持不變,讓後續組建可以使用它們(預設值)。 - False. 在建置完成之後,節點不會保留。 節點會對應至正在執行的專案。 如果您包含 -maxcpucount 參數,則可以同時執行多個節點。 |
-nologo |
不要顯示啟動橫幅或著作權訊息。 |
-preprocess[:{filepath}]
-pp[:{filepath}] |
將建置期間匯入的所有檔案內嵌,並標示其界限,以建立單一匯總的項目檔。 您可以使用此參數,更輕鬆地判斷要匯入哪些檔案、從何處匯入檔案,以及哪些檔案會參與組建。 當您使用此參數時,不會建置專案。 如果您指定 filepath,匯總的項目檔會輸出至檔案。 否則,輸出會出現在主控台視窗中。如需如何使用 Import 專案將項目檔插入另一個專案檔的資訊,請參閱 Import 元素 (MSBuild) 和 如何:在多個項目檔中使用相同的目標。 |
-outputResultsCache[:{cacheFile}]-orc[:{cacheFile}] |
MSBuild 會在組建結尾寫入其組建結果快取內容的輸出快取檔案。 如果 -isolateProjects 設定為 False,這會將它設定為 True。 |
profileEvaluation:{file} |
配置檔 MSBuild 評估,並將結果寫入指定的檔案。 如果指定檔案的擴展名為 『.md』,則結果會以 Markdown 格式產生。 否則,會產生索引標籤分隔的檔案。 |
-property:{name}={value}-p:{name}={value} |
設定或覆寫指定的專案層級屬性,其中 name 是屬性名稱,而 value 是屬性值。 請個別指定每個屬性,或使用分號或逗號分隔多個屬性,如下列範例所示:-property:WarningLevel=2;OutDir=bin\Debug如需常用屬性的清單,請參閱 通用 MSBuild 項目屬性 。 可用屬性的完整集合取決於項目類型、SDK 和匯入的檔案。 |
-restore-r |
先執行 Restore 目標,再建置實際目標。 |
-restoreProperty:{name}={value}-rp:{name}={value} |
只在還原期間設定或覆寫這些專案層級屬性,而且不會使用與 自變數一起 -property 指定的屬性。
name 是屬性名稱,而 value 是屬性值。 使用分號或逗號來分隔多個屬性,或個別指定每個屬性。 |
-target:{targets}-t:{targets} |
在專案中建置指定的目標。 請個別指定每個目標,或使用分號或逗號分隔多個目標,如下列範例所示:-target:PrepareResources;Compile如果您使用此參數指定任何目標,則會執行它們,而不是項目檔中 屬性中的任何 DefaultTargets 目標。 如需詳細資訊,請參閱 目標建置順序 和 如何:指定要先建置的目標。目標是一組工作。 For more information, see Targets. |
-targets[:{file}]-ts[:{file}] |
將可用的目標清單寫入指定的檔案(如果沒有指定檔案,則為輸出裝置),而不需要實際執行建置程式。 |
-toolsVersion:{version}-tv:{version} |
指定自訂工具組。 工具組包含用來建置應用程式的工作、目標和工具。 See Toolset (ToolsVersion) and Standard and custom toolset configurations. |
-validate:[{schema}]-val[{schema}] |
驗證項目檔,如果驗證成功,請建置專案。 如果您未指定 schema,則會根據預設架構驗證專案。如果您指定 schema,則會根據您指定的架構來驗證專案。下列設定是範例: -validate:MyExtendedBuildSchema.xsd |
-verbosity:{level}-v:{level} |
指定要顯示在組建記錄檔中的資訊量。 每個記錄器都會根據您為該記錄器設定的詳細資訊層級來顯示事件。 您可以指定下列詳細資訊層級: q[uiet]、、 n[ormal]m[inimal]、(預設值)、d[etailed]和 diag[nostic]。下列設定是範例: -verbosity:quiet |
-version-ver |
僅顯示版本資訊。 不會建置專案。 |
@{file} |
從文字檔插入命令列參數。 如果您有多個檔案,請分別指定它們。 For more information, see Response files. |
-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 | Description |
|---|---|
-binaryLogger[:[LogFile=]{output.binlog}[;ProjectImports=None、Embed、ZipFile]]-bl[:[LogFile=]{output.binlog}[;ProjectImports=None、Embed、ZipFile]] |
將所有建置事件串行化為壓縮的二進位檔。 By default the file is in the current directory and named msbuild.binlog. 選擇性 LogFile 參數接受格式 {filename}.binlog的字串,其中 {filename} 包含有效的檔案系統字元,但也接受佔位元符號 {}。 如果 {} 提供 ,MSBuild 會以窗體 yyyyMMdd-HHmmss--<current process id>--<6-character random string>的「唯一戳記」填滿該位置。 二進位記錄檔是建置程式的詳細描述,稍後可用來重建文字記錄,並供其他分析工具使用。 二進位記錄通常比最詳細的文字診斷層級記錄小 10-20 倍,但它包含更多資訊。二進位記錄器預設會收集項目檔的來源文字,包括建置期間遇到的所有匯入專案和目標檔案。 選擇性 ProjectImports 參數會控制此行為:- ProjectImports=None. 請勿收集項目匯入。 - ProjectImports=Embed. 在記錄檔中內嵌項目匯入 (預設值)。 - ProjectImports=ZipFile. Save project files to {output}.projectimports.zip where <output> is the same name as the binary log file name. ProjectImports 的預設設定為 Embed。 Note: the logger doesn't collect non-MSBuild source files such as .cs, .cpp, and so on.A .binlog file can be "played back" by passing it to msbuild.exe as an argument instead of a project/solution. 其他記錄器會接收記錄檔中包含的資訊,就像原始組建發生一樣。 您可以在 MSBuild 二進位記錄概觀中深入瞭解二進位記錄檔及其使用方式。 Examples: - -bl- -bl:output.binlog- -bl:output.binlog;ProjectImports=None- -bl:output.binlog;ProjectImports=ZipFile- -bl:..\..\custom.binlog- -bl:publish-{}.binlog- -binaryLogger |
-consoleLoggerParameters:{parameters}-clp:{parameters} |
將您指定的參數傳遞至主控台記錄器,以在主控台視窗中顯示組建資訊。 您可以指定下列參數: - PerformanceSummary. 顯示工作、目標和專案所花費的時間。 - Summary. 在結尾顯示錯誤和警告摘要。 - NoSummary. 不要在結尾顯示錯誤和警告摘要。 - ErrorsOnly. 只顯示錯誤。 - WarningsOnly. 只顯示警告。 - NoItemAndPropertyList. 如果詳細資訊層級設定為 diagnostic,則不要顯示每個專案建置開始時會出現的專案和屬性清單。- ShowCommandLine. 顯示 TaskCommandLineEvent 訊息。- ShowProjectFile. 在診斷訊息中顯示項目檔的路徑。 此設定預設為開啟。 - ShowTimestamp. 將時間戳顯示為任何訊息的前置詞。 - ShowEventId. 顯示每個已啟動事件、已完成事件和訊息的事件標識碼。 - ForceNoAlign. 請勿將文字對齊控制台緩衝區的大小。 - DisableConsoleColor. 針對所有記錄訊息使用預設主控台色彩。 - DisableMPLogging. 在非多處理器模式中執行時,停用輸出的多處理器記錄樣式。 - EnableMPLogging. 即使在非多處理器模式中執行時,仍啟用多處理器記錄樣式。 此記錄樣式預設為開啟。 - ForceConsoleColor. 即使主控台不支援,也請使用 ANSI 控制台色彩。 - Verbosity. 覆寫 -verbosity 此記錄器設定。使用分號分隔多個參數,如下列範例所示: -consoleLoggerParameters:PerformanceSummary;NoSummary -verbosity:minimal預設主控台記錄器在一般詳細資訊中,並包含 Summary。 |
-distributedFileLogger-dfl |
將每個 MSBuild 節點的組建輸出記錄到自己的檔案。 這些檔案的初始位置是目前目錄。 By default, the files are named MSBuild{NodeId}.log. 您可以使用 -fileLoggerParameters 參數來指定 fileLogger 的檔案位置和其他參數。如果您使用 參數命名記錄檔,分散式記錄器會使用該名稱做為範本,並在為每個節點建立記錄檔 -fileLoggerParameters 時,將該節點識別元附加至該名稱。 |
-distributedLogger:{central logger},{forwarding logger}, ...-dl:{central logger},{forwarding 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}] |
將組建輸出記錄至目前目錄中的單一檔案。 If you don't specify number, the output file is named msbuild.log. 如果您指定 number,則輸出檔名為 msbuild<n>.log,其中 <n> 是 number。
Number 可以是 1 到 9 的數位。您可以使用 -fileLoggerParameters 參數來指定 fileLogger 的檔案位置和其他參數。 |
-fileLoggerParameters[{number}]:parameters-flp[{number}]: {parameters} |
指定檔案記錄器和分散式檔案記錄器的任何額外參數。 這個參數的存在表示對應的 -filelogger[number] 參數存在。
Number 可以是 1 到 9 的數位。您可以使用針對 -consoleloggerparameters列出的所有參數。 您也可以使用下列一或多個參數:- LogFile. 寫入建置記錄檔之記錄檔的路徑。 分散式檔案記錄器會在此路徑前面加上其記錄檔的名稱。 - 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: [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 |
停用預設主控台記錄器,且不會將事件記錄到主控台。 |
-terminalLogger[:auto、on、off]-tl[:auto、on、off] |
Enable or disable the terminal logger. 終端機記錄器會即時在控制臺上提供增強的建置輸出,依專案以邏輯方式組織,並設計來醒目提示可採取動作的資訊。 只有在標準輸出未重新導向時,才指定 auto (或使用不含自變數的選項)來使用終端機記錄器。 請勿剖析輸出,或依賴其在未來版本中維持不變。 此選項適用於 MSBuild 17.8 和更新版本。 |
Example
The following example builds the rebuild target of the MyProject.proj project.
MSBuild.exe MyProject.proj -t:rebuild