非常に複雑なVisual Studioソリューション(57プロジェクト、19プロジェクトはWebサイトで、コードをプッシュすることによってほとんど毎回ビルドが失敗しますが、Visual Studio WebサイトのビルドがCIサーバー上で断続的に失敗する
解決策には57のプロジェクトが含まれており、19のプロジェクトはWebプロジェクトです(Webアプリケーションプロジェクトではなく、.csprojファイルはありません)。残りはクラスライブラリとバックグラウンドジョブです。ウェブサイトプロジェクトは、IIS仮想ディレクトリ内の1つの大きな多機能コンテンツ管理システムに構成されています。
ビルドサーバーは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
このアプリケーションドメインをアンロードメッセージを引き起こす可能性がありますか?
他のいくつかの注意事項:
- 我々は、我々はそれをかなり漏れのjavaを観察しないので、それは、メモリ不足ハドソンことができると思っていました。そこで、毎朝午前6時にハドソンサービスを再開する作業を追加しました。これとビルド中に利用可能な空き容量のあるメモリでも、それでも失敗しました。
- 同じリポジトリへのプッシュでも、はるかに単純な(わずか22のプロジェクト、ウェブサイトプロジェクトなし)のソリューションが同時にビルドされます。それは常に成功する。また、両方を同時に起動するように手動で起動すると成功します。
- 私はハドソンをアップグレードするべきだと知っていますが、それはいつも私たちが時間がないようなバックバーナープロジェクトの一つです。いずれにせよ、私はこれがVisual Studio/MSBuildの問題であり、ハドソンの問題ではないことをかなり強く感じています。
編集1:MSBuildの
のMSBuildの問題は、Visual Studioでのビルドとは異なり非常に多くの少し癖があるということです。開発者のマシンでVisual Studioでコンパイルしてビルドサーバーで失敗するというソリューションは非常に不満です。 msbuildからの出力でさえ、開発者がビルドアウトプットウィンドウに表示しているものとは大幅に異なります。 Visual Studioのビルドウィンドウに表示されるものとMSBuildの出力を一列に並べる追加のコマンドラインフラグがありますか?
あまりにも厄介なこともあります。プロジェクトと同じ名前のソリューションフォルダがあると、MSBuildはエラーをスローしますが、Visual Studioはそれを正常に処理します。それらは本当にあなたがあなたの髪を引っ張るようにする癖です。
MSBuildについては、私の質問に追加した「Edit 1」を参照してください。私のお気に入りのオプションではないが、私はそれを試してみる。私はtry/RunExitもやっていますが、私たちはdevenvのインスタンスをサーバー上で守っていません。また、同じリポジトリからでも、両方のソリューションが完全なクローンであるため、2つの同時devenvインスタンスの間で何らかの種類の共有は行われません。 –
MSBuildのログレベルに関しては、/ verbosityフラグ[MSDNリンク](http://msdn.microsoft.com/en-us/library/ms164311.aspx) –
**を使用して変更できます**このオプションVisual Studio 7.0-9.0(2003-2008)およびC++プロジェクトでは使用できません!**(VS 10.0はC++プロジェクトをmsbuildに変換しました。 –