Dav*_*ike 11 msbuild build-automation continuous-integration hudson visual-studio-2010
我们有一个相当复杂的Visual Studio解决方案(57个项目,其中19个是几乎每次都是在推送代码时触发的网站,但随后我们手动触发构建并重试它构建得很好.
该解决方案包含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
Run Code Online (Sandbox Code Playgroud)
当构建失败时,它始终在完全相同的网站项目上执行此操作,并使用完全相同的消息:
------ 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
Run Code Online (Sandbox Code Playgroud)
目前,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
Run Code Online (Sandbox Code Playgroud)
什么可能导致此应用程序域卸载消息?
其他一些说明:
编辑1:MSBuild
MSBuild的问题在于,有许多小怪癖与Visual Studio中的构建不同.对于在开发人员计算机上在Visual Studio中编译然后在构建服务器上失败的解决方案而言,这是非常令人沮丧的.甚至来自msbuild的输出与我们的开发人员在他们的构建输出窗口中看到的完全不同(一件事情更加冗长).是否有其他命令行标志使MSBuild输出更符合您在Visual Studio构建窗口中获得的内容?
还有其他一些事情也很尴尬.如果碰巧有一个名为与项目相同的解决方案文件夹,MSBuild会抛出一个错误,但Visual Studio处理它就好了.这些怪癖真的会让你脱掉头发.
我遇到了Hudson/Jenkins上的C++构建问题,这可能是相关的,如果你有两个版本同时发生,那么可能会发生不好的事情.
这是因为Hudson/Jenkins将在构建结束时运行进程树杀手以清理进程,并且MsBuild/VisualStudio将在构建之间共享一些常见进程.
我对C++构建的实际问题表现为另一个错误:
fatal error C1090: PDB API call failed,
error code '23' : '(
Run Code Online (Sandbox Code Playgroud)
这里提出了这个问题:
https://issues.jenkins-ci.org/browse/JENKINS-9104
关闭进程树杀手可能会解决您的问题.
小智 2
我对 Hudson 或网站项目不太熟悉(我使用 TeamCity 和 Web 应用程序项目),但我想我应该抛出一些东西来看看是否有帮助。
您是否尝试过直接使用 MSBuild 而不是使用 Visual Studio 构建解决方案?该命令看起来像这样:
%windir%\Microsoft.NET\Framework\<version>\MSBuild SolutionName.sln /t:Rebuild /p:configuration=debug
Run Code Online (Sandbox Code Playgroud)
我注意到您没有将命令行开关传递给 Visual Studio 以在构建完成后关闭 /RunExit MSDN 链接 那么 Visual Studio IDE 是否会在每次构建时在构建服务器上打开而不关闭?我可以看到打开相同解决方案的 IDE 的多个实例会导致问题。
如果可能的话,我建议使用 MSBuild 而不是 Visual Studio 来执行构建,除非您依赖 IDE 中的某些内容。至少,您应该获得更快的构建时间,因为您不必加载 Visual Studio,并且它消除了构建过程中的一层复杂性。
希望这有帮助!