Menggunakan beberapa prosesor untuk membangun proyek

MSBuild dapat memanfaatkan sistem yang memiliki beberapa prosesor, atau prosesor multi-inti. Proses build terpisah dibuat untuk setiap prosesor yang tersedia. Misalnya, jika sistem memiliki empat prosesor, maka empat proses build dibuat. MSBuild dapat memproses build ini secara bersamaan, dan oleh karena itu waktu build keseluruhan berkurang. Namun, pembangunan paralel memperkenalkan beberapa perubahan dalam bagaimana proses build terjadi. Topik ini membahas perubahan tersebut.

Project referensi ke proyek

Ketika Microsoft Build Engine menemukan referensi proyek-ke-proyek (P2P) saat menggunakan build paralel untuk membangun proyek, microsoft Build Engine hanya membangun referensi satu kali. Jika dua proyek memiliki referensi P2P yang sama, referensi tidak dibangun kembali untuk setiap proyek. Sebaliknya, mesin build mengembalikan referensi P2P yang sama ke kedua proyek yang bergantung padanya. Permintaan di masa mendatang dalam sesi untuk target yang sama diberikan referensi P2P yang sama.

Deteksi siklus

Fungsi deteksi siklus sama seperti yang dilakukan di MSBuild 2.0, kecuali bahwa sekarang MSBuild dapat melaporkan deteksi siklus pada waktu yang berbeda atau dalam build.

Kesalahan dan pengecualian selama build paralel

Dalam build paralel, kesalahan dan pengecualian dapat terjadi pada waktu yang berbeda dari yang mereka lakukan dalam build non-paralel, dan ketika satu proyek tidak membangun, proyek lain membangun berlanjut. MSBuild tidak akan menghentikan build proyek apa pun yang dibangun secara paralel dengan yang gagal. Proyek lain terus dibangun hingga berhasil atau gagal. Namun, jika ContinueOnError telah diaktifkan, maka tidak ada build yang akan berhenti meskipun terjadi kesalahan.

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

File proyek C++ (.vcxproj) dan solusi (.sln) dapat diteruskan ke tugas MSBuild. Untuk proyek C++, VCWrapperProject dipanggil, lalu proyek MSBuild internal dibuat. Untuk solusi C++, SolutionWrapperProject dibuat, lalu proyek MSBuild internal dibuat. Dalam kedua kasus, proyek yang dihasilkan diperlakukan sama dengan proyek MSBuild lainnya.

Eksekusi multi-proses

Hampir semua aktivitas terkait build mengharuskan direktori saat ini untuk tetap konstan sepanjang proses build untuk mencegah kesalahan terkait jalur. Oleh karena itu, proyek tidak dapat berjalan pada utas yang berbeda di MSBuild karena akan menyebabkan beberapa direktori dibuat.

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