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

Обновлен: Ноябрь 2007

Visual Studio 2008 может использовать преимущества систем, в которых имеется несколько процессоров или многоядерные процессоры. Для каждого доступного процессора создается отдельный процесс построения. Например, если в системе имеется четыре процессора, то создается четыре процесса построения. 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

Другие ресурсы

Построение под конкретную платформу .NET Framework