программа MSBuild.exe остается открытым, блокируя файлы
я использую TeamCity, который в свою очередь вызывает msbuild (.NET 4). У меня есть странная проблема в том, что после завершения сборки (и, похоже, не имеет значения, была ли она успешной сборкой или нет), msbuild.exe остается открытым и блокирует один из файлов, что означает, что каждый раз, когда TeamCity пытается очистить свой рабочий каталог, он терпит неудачу и не может продолжить.
это происходит почти каждый раз.
Я действительно потерял на этом, так что я постараюсь предоставить как можно больше деталей, как вероятный.
- сервер представляет собой Intel Core i7, 2 ГБ оперативной памяти, с Windows Server 2008 стандартный 64-разрядный SP2.
- в TeamCity, MSBuild runner настроен с
/m
параметр командной строки (Что означает использование нескольких ядер) - речь идет о файле всегда та же внешняя DLL, на которую ссылается один из проектов .NET, в пути
External ToolsTelerikTelerik.Reporting.Dll
. (Есть несколько других .DLL файлы, включенные вExternal Tools
реж в аналогичная структура пути, которая никогда не вызывает эту проблему). В настоящее время это с пробной версией отчетов Telerik, в случае, если это имеет какое-либо значение. - когда проблема происходит, всегда есть несколько
msbuild.exe *32
процессы, перечисленные в диспетчере задач: я считаю, что есть 7. Используя Process Explorer, все они выглядят как процессы верхнего уровня (без родителей). Все они используют от 20-50MB ram и 0.0% CPU. - если я подожду 1-3 минуты, msbuild.exe-процессы выходят самостоятельно, и TeamCity может затем обновить рабочий каталог должным образом.
- если я вручную завершу процессы msbuild, обновление TeamCity будет работать снова немедленно.
- службы индексирования отключены в Windows (хотя предыдущие два пункта в значительной степени подтверждают, что это msbuild.exe вызывает проблему).
- нет никаких особых свойств на из Telerik.учет.файл DLL. Единственным свойством SVN является
svn:mime-type = application/octet-stream
кто-нибудь сталкивался с этим раньше?
2 ответа:
использовать
msbuild
с/nr:false
.кратко: MSBuild пытается сделать много вещей, чтобы быть быстрым, особенно с параллельными сборками. Он будет порождать множество "узлов" - отдельных msbuild.exe-процессы, которые могут компилировать проекты, и поскольку процессы занимают немного времени, чтобы развернуться, после завершения сборки эти процессы висят вокруг (по умолчанию, в течение 15 минут, я думаю), так что если вам случится построить снова в ближайшее время, эти узлы могут быть "повторно использованы" и сэкономить затраты на настройку процесса. Но вы можете отключите это поведение, отключив nodeReuse с помощью вышеупомянутого параметра командной строки.
Читайте также: