MSBuild Server 可改善 .NET Core 組建的效能,當您在 Windows、Linux 或 Mac .NET Core 組建環境中使用 .NET CLI 的指令時,會叫用 dotnet build 命令。 在每次要求建置時,不會啟動建置流程,而是在長時間執行的進程中快取大部分內容,以便下一次建置可以重複使用。 MSBuild 伺服器與 Visual Studio 組建無關,因為 Visual Studio 是 MSBuild 的宿主,並且已快取所有必要的上下文。
MSBuild Server 通常在 CI 案例中,例如 Azure 管線的建置中並不有幫助,因為管線通常會根據需求動態建立每次建置的環境,並在建置完成後立即移除。
啟用 MSBuild Server
從 .NET 11 SDK 開始,MSBuild Server 會針對以 MSBuild 為基礎的 .NET CLI 命令預設啟用,例如 dotnet build 和 dotnet msbuild。
在早期的 .NET SDK 中,MSBuild Server 預設是關閉的,你可以透過設定 DOTNET_CLI_USE_MSBUILD_SERVER 為 true 或 1來啟用。
第一次開始建置時,建置伺服器會啟動,快取也會被填滿。 快取在完成該建置後會持續存在;因此,第二次建置速度較快,因為快取資訊大幅縮短了啟動時間。 快取在建置完成後仍會持續存在,但閒置 15 分鐘後,伺服器會自動關閉。 因此,主要在重複建置案例中很有助益,因為許多組建會接連要求。
MSBuild Server 也會自動啟動多執行緒建置(-mt),因為多執行緒會在伺服器程序中執行專案工作。
關閉或停用 MSBuild Server
有幾種不同的方式可以停用 MSBuild 伺服器的使用。 如果您只想關閉執行中的伺服器,您可以發出 命令 dotnet build-server shutdown。
要在一台機器上停用所有建置的這個功能,你可以將系統環境變數 DOTNET_CLI_USE_MSBUILD_SERVER 設為 false。 您也可以在中的 VS Code launch.json之類的工具中,根據每個項目設定此變數。
若要針對命令行組建的特定調用停用 MSBuild Server,您可以使用 選項 /nr:false (或 /node-reuse:false)。 MSBuild Server 是一種節點重用的形式,因此停用節點重用也會讓伺服器失效,建置會在啟動過程中執行。
MSBuild Server 不會用於那些本質上不相容於在個別程序中裝載建置的叫用,例如 -help、-version,以及重播二進位記錄。 這些建置會在啟動過程中退回執行。
判斷組建伺服器的目前狀態
您可以在電腦上檢視進程狀態,並尋找 MSBuild 伺服器進程。 MSBuild 伺服器進程藉由啟動 dotnet.exe,會顯示 MSBuild.dll 的路徑和命令選項 /nodemode:8,其中 8 代表 MSBuild 伺服器(/nodemode:1 代表一般的 MSBuild 工作節點)。
要求使用 MSBuild Server 的建置也會記錄其運作情況。 使用 -v:diag 執行,或使用 -bl 擷取二進位記錄,以查看建置是否會啟動新的伺服器、重複使用正在執行的伺服器,或回退為處理序內建置,以及原因為何。