Я поддерживаю сборку довольно большой части программного обеспечения, состоящей из примерно 350 проектов csharp. Наше время сборки для отлаженных встроенных часов составляет около 17 минут.
Я искал способы улучшить время сборки, и свойство BuildInParallel выглядело интригующим. Тем более, что у нас есть четырехъядерный сервер, который делает наши сборки, он действительно должен иметь возможность использовать вычислительную мощность.
Но, увы... После установки свойства, изменения файла конфигурации для агента сборки и перезапуска его, первый запуск действительно выглядел многообещающим, быстрее, чем обычно, вплоть до момента, когда он не удался.
Посмотрев на журналы сборки, похоже, что сборка завершилась неудачей, когда она пытается скопировать ссылки, помеченные как CopyLocal = true в директорию ouput. Если С# проект A и С# проект B построены параллельно, и оба ссылаются на одну и ту же стороннюю dll и пытаются скопировать его одновременно, второй процесс для попытки скопировать файл приведет к нарушению доступа к файлу - файл используется другим процессом.
Кто-нибудь испытал это и смог получить многопроцессные сборки, работающие над Team Build?
Здесь один из сбоев, трудно понять, какой другой проект строился в то же время.
Я удалил все ненужные вещи:
54 > Целевая "_CopyFilesMarkedCopyLocal" в файле "C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets" от проекта "D:\Temp\PCM\1.3-Maint_CI\Sources\модули\Ядро\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\Бинарники\Debug\Oracle.DataAccess.dll" . Команда: copy/y "..........\Bin\3rdParty\Oracle\Oracle.DataAccess.dll" "D:\Temp\PCM\1.3-Maint_CI\Бинарники\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\Бинарники\Debug\Oracle.DataAccess.dll" . процесс не может получить доступ к файлу 'D:\Temp\PCM\1,3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll' потому что он используется другим процессом. Выполнено выполнение задачи "Копировать" - FAILED. 54 > Готово создать цель "_CopyFilesMarkedCopyLocal" в проекте "TestDIPS.Core.Data.Server.NUnit.csproj" - FAILED.