Bagikan melalui


MSBuild menggunakan beberapa prosesor untuk membangun proyek

MSBuild dapat memanfaatkan sepenuhnya sistem yang memiliki beberapa prosesor atau prosesor multi-inti dengan membuat proses build terpisah untuk setiap prosesor. Misalnya, jika sistem memiliki empat prosesor, MSBuild membuat empat proses build.

MSBuild dapat memproses beberapa build secara bersamaan, yang mengurangi waktu build keseluruhan. Namun, build paralel dapat memperkenalkan perubahan dalam bagaimana proses build terjadi.

Artikel ini menjelaskan perubahan proses yang dapat terjadi saat beberapa build berjalan secara bersamaan.

Referensi proyek-ke-proyek

Saat Microsoft Build Engine menemukan referensi proyek (ProjectReference elemen) selama build paralel untuk proyek, microsoft Build Engine hanya membangun referensi satu kali. Jika dua proyek memiliki referensi proyek yang sama, referensi tidak dibangun kembali untuk setiap proyek. Sebaliknya, mesin build mengembalikan referensi proyek yang sama ke kedua proyek yang memiliki dependensi. MSBuild juga menyediakan referensi proyek yang sama ke permintaan di masa mendatang dalam sesi untuk target yang sama.

Deteksi siklus

Deteksi siklus selama build paralel adalah perilaku yang sama seperti untuk MSBuild 2.0. Salah satu perbedaannya adalah bahwa versi MSBuild yang lebih baru dapat melaporkan deteksi siklus pada waktu yang berbeda atau dalam build.

Kesalahan dan pengecualian selama build paralel

Selama build paralel, kesalahan dan pengecualian dapat terjadi pada waktu yang berbeda dari yang mereka lakukan selama build nonparallel. Selain itu, jika satu proyek tidak berhasil dibangun, proyek-proyek lain tetap dilanjutkan pembangunannya.

MSBuild tidak menghentikan pembangunan proyek apa pun secara paralel dengan build yang gagal. Proyek lain terus dibangun hingga berhasil atau gagal. ContinueOnError Saat pengaturan diaktifkan, tidak ada build yang berhenti, bahkan jika terjadi kesalahan.

File proyek C++ (.vcxproj) dan solusi (.sln)

File proyek C++ (.vcxproj) dan solusi (.sln) dapat diteruskan ke tugas MSBuild.

  • Proyek C++: API VCWrapperProject dipanggil dan kemudian proyek MSBuild internal dibuat.
  • Solusi C++: Instans SolutionWrapperProject dibuat lalu proyek MSBuild internal dibuat.

Dalam kedua kasus, proyek yang dihasilkan ditangani seperti proyek MSBuild lainnya.

Eksekusi multi-proses

Hampir semua aktivitas terkait build mengharuskan direktori saat ini agar tetap konsisten sepanjang proses build untuk mencegah kesalahan yang terkait dengan jalur. Proyek tidak dapat berjalan pada utas yang berbeda di MSBuild karena dapat menyebabkan pembuatan beberapa direktori.

Untuk menghindari masalah ini tetapi masih mengaktifkan build multi-prosesor, MSBuild menggunakan isolasi proses. Proses ini memungkinkan MSBuild untuk membuat maksimum n proses, di mana n sama dengan jumlah prosesor yang tersedia pada sistem. Misalnya, jika MSBuild membangun solusi pada sistem dengan dua prosesor, hanya dua proses build yang dibuat. Proses ini digunakan kembali untuk membangun semua proyek dalam solusi.