Udostępnij za pośrednictwem


Program MSBuild używa wielu procesorów do kompilowania projektów

Program MSBuild może w pełni wykorzystać systemy z wieloma procesorami lub procesorami wielordzeniowymi, tworząc oddzielny proces kompilacji dla każdego procesora. Jeśli na przykład system ma cztery procesory, program MSBuild tworzy cztery procesy kompilacji.

Program MSBuild może przetwarzać wiele kompilacji jednocześnie, co zmniejsza całkowity czas kompilacji. Jednak kompilacje równoległe mogą wprowadzać zmiany w sposobie wykonywania procesów kompilacji.

W tym artykule opisano zmiany procesów, które mogą wystąpić, gdy wiele kompilacji jest uruchamianych jednocześnie.

Odwołania do projektu

Gdy silnik Microsoft Build Engine napotka odwołanie do projektu (ProjectReference element) podczas równoległego budowania w projekcie, buduje odwołanie tylko raz. Jeśli dwa projekty mają takie same odwołanie do projektu, odwołanie nie zostanie ponownie skompilowane dla każdego projektu. Zamiast tego silnik budowy zwraca to samo odwołanie do projektu obu projektom, które mają zależność. Program MSBuild dostarcza również odwołanie do tego samego projektu do kolejnych żądań w sesji dla tego samego zadania.

Wykrywanie cyklu

Wykrywanie cyklu podczas kompilacji równoległych jest takie samo jak w przypadku programu MSBuild 2.0. Jedną z różnic jest to, że nowsza wersja programu MSBuild może zgłaszać wykrywanie cyklu w innym czasie lub w kompilacji.

Błędy i wyjątki podczas równoległych kompilacji

Podczas kompilacji równoległych błędy i wyjątki mogą występować w różnych momentach niż podczas kompilacji nieparallelowej. Ponadto, jeśli jeden projekt nie zostanie skompilowy, inne kompilacje projektu będą kontynuowane.

Program MSBuild nie zatrzymuje kompilacji innych projektów, gdy odbywa się równolegle z kompilacją, która zakończyła się niepowodzeniem. Inne projekty będą nadal budować, dopóki nie powiedzie się lub zakończy się sukcesem. Gdy ustawienie ContinueOnError jest włączone, kompilacje nie zatrzymują się, nawet jeśli wystąpi błąd.

Pliki projektu języka C++ (.vcxproj) i rozwiązania (.sln)

Pliki projektu C++ (.vcxproj) i rozwiązania (.sln) można przekazać do zadania MSBuild.

  • Projekty języka C++: interfejs API VCWrapperProject jest wywoływany, a następnie tworzony jest wewnętrzny projekt MSBuild.
  • Rozwiązania języka C++: tworzone jest wystąpienie SolutionWrapperProject, a następnie jest tworzony wewnętrzny projekt MSBuild.

W obu przypadkach wynikowy projekt jest obsługiwany jak każdy inny projekt MSBuild.

Wykonywanie wielu procesów

Prawie wszystkie działania związane z kompilacją wymagają, aby bieżący katalog pozostał stały w całym procesie kompilacji, aby zapobiec błędom związanym ze ścieżką. Projekty nie mogą być uruchamiane w różnych wątkach w programie MSBuild, ponieważ mogą powodować tworzenie wielu katalogów.

Aby uniknąć tego problemu, ale nadal włączać kompilacje z wieloma procesorami, program MSBuild używa izolacji procesów. Ten proces umożliwił programowi MSBuild utworzenie maksymalnej liczby procesów n , gdzie n równa się 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. Te procesy są ponownie używane do kompilowania wszystkich projektów w rozwiązaniu.