Поделиться через


Использование нескольких процессоров при построении проектов

MSBuild может использовать преимущества систем с несколькими процессорами или многоядерными процессорами. Для каждого доступного процессора создается отдельный процесс построения. Например, если в системе имеется четыре процессора, то создается четыре процесса построения. MSBuild может обрабатывать эти построения одновременно, поэтому общее время построений уменьшается. Однако параллельное построение вводит некоторые изменения в сами процессы построений. Эти изменения обсуждаются в данном разделе.

Ссылки между проектами

Если при использовании параллельных построений для создания проекта Microsoft Build Engine обнаруживает ссылку проекта на проект (P2P), ссылка создается только один раз. Если в двух проектах содержатся одинаковые ссылки проекта на проект, то ссылка не создается заново для каждого проекта. Вместо этого обработчик построений возвращает одну и ту же ссылку проекта на проект в оба проекта, которые от нее зависят. При наличии дальнейших запросов к тому же целевому объекту в сеансе предоставляется та же ссылка проекта на проект.

Обнаружение цикла

Функции обнаружения цикла работают так же, как и в MSBuild 2.0, только теперь MSBuild может сообщать об обнаружении цикла в другое время или в ходе построения.

Ошибки и исключения при параллельных процессах построения

При параллельном построении ошибки и исключения могут появляться в другое время по сравнению с непараллельным построением, и когда построение одного проекта останавливается, построение других проектов продолжается. MSBuild не останавливает построение проекта, построения также продолжаются либо. Построение других проектов продолжается до тех пор, пока они и не будет успешен или будут заканчиваться ошибкой. Однако, если включено свойство ContinueOnError, построения не останавливаются даже при появлении ошибок.

Файлы проектов (.vcproj) и решений (.sln) Visual C++

Файлы проектов (.vcproj) и файлы решений (.sln) Visual C++ можно передавать в Задача MSBuild. Для проектов Visual C++ вызывается VCWrapperProject, а затем создается внутренний проект MSBuild. Для решений Visual C++ создается SolutionWrapperProject, а затем создается внутренний проект MSBuild. В обоих случаях полученный проект обрабатывается так же, как любой другой проект MSBuild.

Выполнение нескольких процессов

Практически для всех связанных с построением действий требуется, чтобы текущий каталог оставался неизменным на протяжении всего процесса во избежание появления ошибок, касающихся пути. Таким образом, в MSBuild проекты нельзя выполнять в разных потоках, поскольку при этом было бы создано несколько каталогов.

Чтобы избежать появления этой проблемы, сохранив при этом возможность многопроцессорных построений, в MSBuild используется "изоляция процессов". Используя изоляцию процессов, MSBuild может создать максимум n процессов, где n равно числу доступных процессоров в системе. Например, если MSBuild создает решение в системе, включающей два процессора, то создается только два процесса сборки. Эти процессы используются многократно для создания всех проектов в решении.

См. также

Основные понятия

Параллельное построение нескольких проектов с помощью MSBuild

Задачи MSBuild