かなり複雑な Visual Studio ソリューションがあります (57 プロジェクト、そのうち 19 プロジェクトは、コードのプッシュによってトリガーされるたびにビルドに失敗する Web サイトですが、手動でビルドをトリガーし、再試行すると問題なくビルドされます。
このソリューションには 57 個のプロジェクトが含まれており、そのうち 19 個が Web サイト プロジェクトです。(Web アプリケーション プロジェクトではありません。.csproj ファイルはありません。) 残りはクラス ライブラリとバックグラウンド ジョブです。19 の Web サイト プロジェクトは、IIS 仮想ディレクトリ内で 1 つの大きな多機能コンテンツ管理システムに構造化されています。
ビルド サーバーは Hudson v1.395 です。ビルドに使用するコマンドは次のとおりです。
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" "SolutionName.sln" /rebuild Debug
ビルドが失敗すると、常にまったく同じ Web サイト プロジェクトで、まったく同じメッセージが表示されます。
------ 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
このアプリケーション ドメイン アンロード メッセージの原因は何ですか?
その他の注意事項:
- Java がメモリをかなりリークしていることを確認しているため、Hudson がメモリ不足である可能性があると考えました。そこで、毎朝 6 時に Hudson サービスを再起動するタスクを追加しました。これと、ビルド中に使用可能な十分な量のメモリが用意されていても、それでも失敗しました。
- 同じリポジトリにプッシュすると、同時に、はるかに単純な (22 プロジェクトのみ、Web サイト プロジェクトなし) ソリューションがビルドされます。そいつは必ず成功する。また、両方を同時に実行するように手動でトリガーすると、成功します。
- Hudson をアップグレードする必要があることは承知していますが、これは常に、時間がないバックバーナー プロジェクトの 1 つです。いずれにせよ、これは Hudson の問題ではなく、Visual Studio / MSBuild の問題であると強く感じています。
編集 1: MSBuild
MSBuild の問題は、Visual Studio でのビルドとは異なる小さな癖が非常に多いことです。ソリューションが開発者のコンピューターの Visual Studio でコンパイルされ、ビルド サーバーで失敗することは、非常にイライラします。msbuild からの出力でさえ、開発者がビルド出力ウィンドウに表示するものとは大幅に異なります (1 つの点についてははるかに詳細です)。MSBuild の出力を Visual Studio のビルド ウィンドウで得られるものとより一致させる追加のコマンド ライン フラグはありますか?
むずかしいことは他にもあります。プロジェクトと同じ名前のソリューション フォルダーがある場合、MSBuild はエラーをスローしますが、Visual Studio は問題なく処理します。それらは本当にあなたの髪を引っ張る癖です.