Я поддерживаю сборку довольно большого программного обеспечения, состоящего примерно из 350 проектов csharp. Наше время сборки для встроенной отладки составляет около 17 минут.
Я искал способы сократить время сборки, и свойство BuildInParallel выглядело интригующим. Тем более, что у нас есть четырехъядерный сервер, выполняющий наши сборки, он действительно должен иметь возможность использовать преимущества вычислительной мощности.
Но, увы ... После установки свойства, изменения файла конфигурации для агента сборки и его перезапуска, первый запуск действительно выглядел многообещающим, намного быстрее, чем обычно, вплоть до момента, когда он потерпел неудачу.
После просмотра журналов сборки кажется, что сборка завершается неудачей, когда она пытается скопировать ссылки, помеченные как CopyLocal = true, в выходной каталог. Если проект C # A и проект C # B построены параллельно, и оба ссылаются на одну и ту же стороннюю dll и пытаются скопировать ее одновременно, второй процесс, пытающийся скопировать файл, получит нарушение доступа к файлу - файл используется другим процессом.
Кто-нибудь испытал это и смог получить многопроцессорные сборки, работающие над Team Build?
Вот одна из неудач: сложно понять, какой еще проект строился в то же время.
Я удалил все ненужное:
54> Целевой объект «_CopyFilesMarkedCopyLocal» в файле «c: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets» из проекта «d: \ temp \ PCM \ 1.3-Maint_CI \ Sources \ Modules \ Core \ Test \ UnitTest \ TestDIPS.Core.Data.Server.NUnit \ TestDIPS.Core.Data.Server.NUnit.csproj ": 54> Задача" Копировать "Копирование файла из" .......... \ Bin \ 3rdParty \ Oracle \ Oracle.DataAccess.dll "в" d: \ temp \ PCM \ 1.3-Maint_CI \ Binaries \ Debug \ Oracle.DataAccess.dll ". Команда: copy / y ".......... \ Bin \ 3rdParty \ Oracle \ Oracle.DataAccess.dll" "d: \ temp \ PCM \ 1.3-Maint_CI \ Binaries \ Debug \ Oracle.DataAccess.dll "54> c: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets (2703,9): ошибка MSB3021: невозможно скопировать файл" .......... \ Bin \ 3rdParty \ Oracle \ Oracle.DataAccess.dll "в" d: \ temp \ PCM \ 1.3-Maint_CI \ Binaries \ Debug \ Oracle.DataAccess.dll ". Процесс не может получить доступ к файлу 'd: \ temp \ PCM \ 1.3-Maint_CI \ Binaries \ Debug \ Oracle.DataAccess.dll', потому что он используется другим процессом. Готово, выполнение задачи «Копировать» - НЕ выполнено. 54> Выполнено построение цели «_CopyFilesMarkedCopyLocal» в проекте «TestDIPS.Core.Data.Server.NUnit.csproj» - НЕ ИСПОЛЬЗУЕТСЯ.