Kompilowanie projektów przy użyciu wielu procesorów
Program MSBuild potrafi optymalnie wykorzystywać komputery z wieloma procesorami lub procesorami wielordzeniowymi. Dla każdego dostępnego procesora jest tworzony oddzielny proces kompilacji. Jeśli na przykład system ma cztery procesory, powstają cztery procesy kompilacji. Program MSBuild może przetwarzać te kompilacje jednocześnie, a tym samym skrócić ogólny czas kompilacji. Jednak kompilowanie równoległe wprowadza pewne zmiany w przebiegu procesów kompilacji. Omówiono je w tym temacie.
Odwołania do projektu
Gdy aparat Microsoft Build Engine napotka odwołanie do projektu (P2P), gdy używa równoległych kompilacji do kompilowania projektu, kompiluje odwołanie tylko raz. Jeśli dwa projekty mają to samo odwołanie P2P, nie będzie ono kompilowane osobno dla każdego projektu. Zamiast tego aparat kompilacji zwraca to samo odwołanie P2P do obu projektów, które go używają. Na przyszłe żądania o ten sam element docelowy w trakcie jednej sesji jest podawane to samo odwołanie P2P.
Wykrywanie cyklu
Funkcje wykrywania cyklu tak samo jak w programie MSBuild 2.0, z tą różnicą, że teraz program MSBuild może zgłaszać wykrywanie cyklu w innym czasie lub w kompilacji.
Błędy i wyjątki podczas równoległych kompilacji
W kompilacjach równoległych błędy i wyjątki mogą się wydarzyć o innym czasie niż podczas kompilacji nierównoległej i gdy jeden projekt nie jest kompilowany, druga kompilacja trwa dalej. Program MSBuild nie zatrzyma żadnej kompilacji projektu, która jest kompilowana równolegle z kompilacją, która zakończyła się niepowodzeniem. Inne projekty będą nadal kompilować, dopóki nie powiedzie się lub zakończy się niepowodzeniem. Jednak jeśli włączono opcję ContinueOnError, kompilacje nie będą zatrzymywane nawet mimo wystąpienia błędów.
Pliki projektu C++ (vcxproj) i rozwiązania (sln)
Oba projekty języka C++ (vcxproj) i pliki rozwiązania (.sln) można przekazać do zadania MSBuild. W przypadku projektów C++ wywoływana jest funkcja VCWrapperProject, a następnie jest tworzony wewnętrzny projekt MSBuild. W przypadku rozwiązań języka C++ zostanie utworzony projekt SolutionWrapperProject, a następnie zostanie utworzony wewnętrzny projekt MSBuild. W obu przypadkach wynikowy projekt jest traktowany tak samo jak każdy inny projekt MSBuild.
Wykonywanie wielu procesów
Prawie wszystkie czynności dotyczące kompilacji wymagają, aby bieżący katalog pozostał bez zmian przez cały proces kompilacji, ponieważ zapobiega to błędom związanym ze ścieżką. W związku z tym projekty nie mogą być uruchamiane w różnych wątkach w programie MSBuild, ponieważ spowodowałoby utworzenie wielu katalogów.
Aby uniknąć tego problemu, ale nadal włączać kompilacje z wieloma procesorami, program MSBuild używa "izolacji procesów". Przy użyciu izolacji procesów program MSBuild może utworzyć maksymalną liczbę procesów n
, w których n
jest równa liczbie procesorów dostępnych w systemie. Jeśli na przykład program MSBuild tworzy rozwiązanie w systemie z dwoma procesorami, tworzone są tylko dwa procesy kompilacji. Procesy te są wykonywane wielokrotnie w celu skompilowania wszystkich projektów w rozwiązaniu.