Использование нескольких процессоров при построении проектов
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 создает решение в системе, включающей два процессора, то создается только два процесса сборки. Эти процессы используются многократно для создания всех проектов в решении.