使用多個處理器來建置專案
MSBuild 可運用有多個處理器或多核心處理器的系統。 系統會為每一個處理器各建立一個建置處理序。 例如,如果系統有四個處理器,就會建立四個建置處理序。 MSBuild 可同時處理這些建置,因此將縮短整體的建置時間。 不過,同時進行建置會對建置處理序的執行方式造成一些變更。 本主題將會討論這些變化。
專案對專案間的參考
當 Microsoft Build Engine 以並行方式建置專案時,如果遇到專案對專案間 (P2P) 參考,只會建置參考一次。 如果兩個專案有相同的 P2P 參考,系統並不會為這兩個專案重新建置參考。 相反地,建置引擎會將相同的 P2P 參考傳回相依在該參考的這兩個專案。 若此工作階段接下來再出現對相同目標的要求,會提供相同的 P2P 參考。
循環偵測
循環偵測的作用與它在 MSBuild 2.0 的作用相同,不過,現在 MSBuild 可在不同時間或在建置中報告偵測到循環。
同時進行建置期間的錯誤和例外狀況
在同時進行建置期間,錯誤和例外狀況發生的時間可能與一般非同時進行建置時不同,而且當某個專案未建置時,其他專案仍會繼續建置。 當多個專案內其中一者發生失敗時, MSBuild 不會停止任何的專案建置。 其他專案仍會繼續建置,直到它們成功或失敗為止。 不過,如果啟用 ContinueOnError,則即使發生錯誤,所有建置仍會繼續不停止。
Visual C++ 專案檔 (.vcproj) 和方案檔 (.sln)
Visual C++ 專案檔 (.vcproj) 和方案檔 (.sln) 都可以傳遞至 MSBuild 工作。 若為 Visual C++ 專案,會呼叫 VCWrapperProject,然後建立內部 MSBuild 專案。 若為 Visual C++ 方案,會呼叫 SolutionWrapperProject,然後建立內部 MSBuild 專案。 無論哪種情況,所產生的專案會視為與任何其他 MSBuild 專案相同。
多處理序執行
幾乎所有與建置相關的活動都需要目前的目錄在整個建置過程保持不變,以避免發生與路徑相關的錯誤。 因此,專案不能在 MSBuild 中的不同執行緒上執行,因為這會導致建立多個目錄。
為避免此問題發生,但又要啟用多處理器建置,MSBuild 會使用「處理序隔離」。藉由使用處理序隔離,MSBuild 可建立最多 n 個處理序,其中 n 等於系統上可用的處理器數目。 例如,如果 MSBuild 在有兩個處理序的系統上建置方案,就只會建立兩個建置處理序。 這兩個處理序會重複使用來建立方案中的所有專案。