Я использую TeamCity, который, в свою очередь, вызывает msbuild (.NET 4). У меня странная проблема в том, что после завершения сборки (и, похоже, не имеет значения, была ли сборка успешной или нет), msbuild.exe остается открытым и блокирует один из файлов, что означает, что каждый раз, когда TeamCity пытается чтобы очистить свой рабочий каталог, он не работает и не может продолжить работу.
Это случается почти каждый раз.
Я действительно потерялся в этом, поэтому постараюсь предоставить как можно больше подробностей.
- Сервер представляет собой Intel Core i7, 2 ГБ оперативной памяти, со стандартным 64-разрядным пакетом обновления 2 (SP2) Windows Server 2008.
- В TeamCity средство запуска msbuild настраивается с помощью параметра
/m
командной строки (что означает использование нескольких ядер) - Рассматриваемый файл ВСЕГДА является той же внешней DLL, на которую есть ссылка в одном из проектов .NET в пути
External Tools\Telerik\Telerik.Reporting.Dll
. (Есть несколько других файлов .DLL, включенных вExternal Tools
каталог с аналогичной структурой пути, которые никогда не вызывают этой проблемы). В настоящее время это пробная версия отчетов Telerik, если это имеет значение. - Когда возникает проблема,
msbuild.exe *32
в диспетчере задач всегда отображается несколько процессов: я считаю, что их 7. При использовании Process Explorer все они выглядят как процессы верхнего уровня (без родителей). Все они используют от 20 до 50 МБ оперативной памяти и 0,0% ЦП. - Если я подожду 1-3 минуты, процессы msbuild.exe завершатся сами по себе, и TeamCity сможет правильно обновить рабочий каталог.
- Если я вручную завершу процессы msbuild, обновление TeamCity снова заработает немедленно.
- Службы индексирования отключены в Windows (хотя предыдущие два пункта в значительной степени подтверждают, что причиной проблемы является msbuild.exe).
- Для Telerik.reporting.dll нет специальных свойств. Единственное свойство SVN -
svn:mime-type = application/octet-stream
Кто-нибудь сталкивался с этим раньше?
/m /nr:false
, пробегу несколько сборок и посмотрю, как пойдет. СпасибоЧтобы отключить повторное использование узлов в Visual Studio, необходимо использовать переменную среды:
источник