У нас есть довольно сложное решение Visual Studio (57 проектов, 19 из которых — веб-сайты, которые не собираются почти каждый раз при запуске путем отправки кода, но затем мы вручную запускаем сборку, и при повторной попытке сборка выполняется нормально
Решение содержит 57 проектов, 19 из которых являются проектами веб-сайтов (не проекты веб-приложений, файла .csproj нет). Остальные представляют собой библиотеки классов. и фоновые задания. 19 проектов веб-сайтов структурированы в виртуальных каталогах IIS в одну большую многофункциональную систему управления контентом.
Сервер сборки — Hudson v1.395. Команда, используемая для сборки:
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" "SolutionName.sln" /rebuild Debug
Когда сборка завершается сбоем, всегда делает это на одном и том же проекте веб-сайта , с точно таким же сообщением:
------ Rebuild All started: Project: C:\...\WebsiteName\, Configuration: Debug Any CPU ------
Validating Web Site
: Build (web): The application domain in which the thread was running has been unloaded.
Validation Complete
Поиск в Google для этого сообщенияв настоящее время менее чем полезен. Эта ссылканаиболее близка к реальной проблеме, но не имеет решения. Очевидно, что мы не меняем никаких файлов решения во время сборки, потому что это происходит на сервере сборки.
В случае сбоя мы запускаем сборку вручную и получаем ожидаемое (извините, отредактировано):
------ Rebuild All started: Project: C:\...\News2\, Configuration: Debug Any CPU ------
Validating Web Site
Building directory '/WebsiteName/Dir1/Dir2/'.
Building directory '/WebsiteName/'.
Building directory '/WebsiteName/Dir3/'.
// 22 more but you get the point
// A few warnings caused by our own use of the ObsoleteAttribute, nothing to be concerned about
Validation Complete
Что может вызвать это сообщение о выгрузке домена приложения?
Некоторые другие примечания:
Редактировать 1: MSBuild
Проблема с MSBuild заключается в том, что существует множество мелких особенностей, которые отличаются от сборки в Visual Studio. Крайне неприятно, когда решение компилируется в Visual Studio на компьютере разработчика, а затем дает сбой на сервере сборки. Даже вывод msbuild кардинально отличается (с одной стороны, гораздо более подробным) от того, что наши разработчики видят в окне вывода сборки. Существуют ли дополнительные флаги командной строки, которые приводят выходные данные MSBuild в соответствие с тем, что вы получаете в окне сборки Visual Studio?
Есть и другие неловкие вещи. Если у вас есть папка решения с таким же именем, как и у проекта, MSBuild выдает ошибку, но Visual Studio прекрасно справляется с этим. Это те причуды, которые действительно заставляют вас рвать на себе волосы.