Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MSBuild может использовать все преимущества систем с несколькими процессорами или несколькими ядрами, создавая отдельный процесс сборки для каждого процессора. Например, если система имеет четыре процессора, MSBuild создает четыре процесса сборки.
MSBuild может одновременно обрабатывать несколько сборок, что сокращает общее время сборки. Однако параллельные сборки могут вносить изменения в способе выполнения процессов сборки.
В этой статье описываются изменения процесса, которые могут возникать при одновременном выполнении нескольких сборок.
Ссылки от проекта к проекту
Когда подсистема сборки Майкрософт встречает ссылку на проект (ProjectReference элемент) во время параллельных сборок для проекта, она создает ссылку только один раз. Если два проекта имеют одинаковую ссылку на проект, ссылка не будет перестроена для каждого проекта. Вместо этого подсистема сборки возвращает одну ссылку на проект для обоих проектов, имеющих зависимость. MSBuild также предоставляет ту же ссылку на указанный проект для будущих запросов в текущем сеансе для того же целевого задания.
Обнаружение циклов
Обнаружение циклов во время параллельных сборок совпадает с поведением MSBuild 2.0. Одно из различий заключается в том, что более новая версия MSBuild может сообщать об обнаружении цикла в другое время или в сборке.
Ошибки и исключения во время параллельных сборок
Во время параллельных сборок ошибки и исключения могут возникать в разное время, чем во время непараллелной сборки. Кроме того, если один проект не выполняет сборку, другой проект продолжается.
MSBuild не останавливает сборку других проектов в параллельном режиме, даже если одна из сборок не удалась. Другие проекты продолжают развиваться до тех пор, пока они не достигают успеха или терпят неудачу. ContinueOnError Если параметр включен, сборки не останавливаются, даже если возникает ошибка.
Файлы проекта C++ (.vcxproj) и решения (.sln)
Файлы проекта C++ (.vcxproj) и решения (.sln) можно передать в задачу MSBuild.
- Проекты C++: вызывается API VCWrapperProject, а затем создается внутренний проект MSBuild.
- Решения C++: создается экземпляр SolutionWrapperProject, а затем создается внутренний проект MSBuild.
В обоих случаях результирующий проект обрабатывается как любой другой проект MSBuild.
Выполнение нескольких процессов
Почти все действия, связанные со сборкой, требуют, чтобы текущий каталог оставался неизменным на протяжении всего процесса сборки, чтобы избежать ошибок, связанных с путями. Проекты не могут выполняться в разных потоках в MSBuild, так как они могут привести к созданию нескольких каталогов.
Чтобы избежать этой проблемы, но по-прежнему включить сборки с несколькими процессорами, MSBuild использует изоляцию процессов. Этот процесс позволил MSBuild создать максимум n процессов, где n равно количеству процессоров, доступных в системе. Например, если MSBuild создает решение в системе с двумя процессорами, создаются только два процесса сборки. Эти процессы повторно используются для создания всех проектов в решении.