我们有一个相当复杂的Visual Studio解决方案(57个项目,其中19个是几乎每次都是通过推送代码触发而无法构建的网站,但随后我们手动触发构建并重试它构建得很好。< / p>
该解决方案包含57个项目,其中19个是网站项目。 (不是Web应用程序项目,没有.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 Search for this message目前不太有帮助。 This link最接近实际问题,但没有解决方案。显然,我们在构建期间不会更改任何解决方案文件,因为它发生在构建服务器上。
当它失败时,我们会手动触发构建,我们会按预期得到(抱歉,编辑):
------ 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处理它就好了。这些怪癖真的会让你脱掉头发。
答案 0 :(得分:6)
我遇到了Hudson / Jenkins上的C ++构建问题,这可能是相关的,如果你有两个版本同时发生,那么可能会发生不好的事情。
这是因为Hudson / Jenkins将在构建结束时运行进程树杀手来清理进程,而MsBuild / VisualStudio将在构建之间共享一些常见进程。
我对C ++构建的实际问题表现为另一个错误:
fatal error C1090: PDB API call failed,
error code '23' : '(
这里提出了这个问题:
https://issues.jenkins-ci.org/browse/JENKINS-9104
关闭进程树杀手可能会解决您的问题。
答案 1 :(得分:2)
我不熟悉Hudson或网站项目(我使用TeamCity和Web应用程序项目),但我想我会抛出一些东西,看它是否会有所帮助。
您是否尝试过直接使用MSBuild构建解决方案而不是使用Visual Studio?该命令看起来像这样:
%windir%\Microsoft.NET\Framework\<version>\MSBuild SolutionName.sln /t:Rebuild /p:configuration=debug
我注意到在构建完成后你没有将命令行开关传递给visual studio来关闭/ RunExit MSDN Link所以可能是Visual Studio IDE在你的构建服务器上为每个构建打开不关门?我可以看到IDE的多个实例具有相同的解决方案打开导致问题。
我建议尽可能使用MSBuild而不是Visual Studio执行构建,除非您依赖于IDE中的某些内容。您至少应该获得更快的构建时间,因为您不必加载Visual Studio,它会在构建过程中消除一层复杂性。
希望这有帮助!
答案 2 :(得分:2)
由于相同签入而运行的另一个并发构建感觉它们是相关的。在我的构建过程中,当相关构建运行时,资源消失让我对相关构建产生怀疑。
我知道你说你可以手动同时运行它们,一切都很顺利。虽然它闻起来像是一种竞争条件。尝试禁用较小项目的自动触发器并作为最终的健全性检查,以确保它不会弄乱你。
我想如果你根本没有怀疑它,你就不会在帖子中提到它。出来的规则。