3

ASP.NET MVC 4.5 プロジェクトがあります。何ヶ月もの間、開発マシンと TeamCity 7.1.5 マシンでローカルにコンパイルされ、すべての単体テストがパスされました。月曜日に、一部の依存関係の新しいバージョンに更新しました (具体的には、select-expand 用の OData 5.0.0-rc1 を取得するため)。

プロジェクトは、開発マシンとビルド マシンで正常にコンパイルされます。開発マシンと、展開先の両方の QA 環境で正常に動作します。すべての単体テストは、開発マシンでパスします。ただし、MSTest ビルド ランナーを使用して TeamCity から実行すると、単体テストの約半分 (~300) が失敗し、すべて同じ無用のエラーが発生します。

Unit Test Adapter threw exception: 
Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

私は考えられるすべてを試しました。最初は、正当な問題があると考えました。TeamCity から LoaderExceptions プロパティを取得する方法がないため (なぜ MSTest は詳細情報を表示しないのですか!?!?)、TeamCity が実行されているマシンにログインし、コンソールを開き、作業ディレクトリに変更しました。プロパティを取得できるように、ビルドを実行し、テストを手動で実行しました。すべてのテストに合格しました! その説はありますが…

グーグルで丸一日過ごし、StackOverflow で他の回答を読んだ後、次の手順のさまざまな組み合わせを約 20 種類試しました。

  • ビルドを「再構築」から「クリーン」に変更し、テストなしで実行してクリーンアップするだけにし、元に戻して再度実行します。
  • ビルドを「デバッグ」から「リリース」に変更し、それを実行して、再び元に戻します。
  • TeamCity 管理ページからのエージェント ソースのクリーニング。
  • エージェントから作業ディレクトリ全体を手動で削除し、ごみ箱をスキップして、冥界に直行します。
  • すべてのソース管理 (TFS) キャッシュを削除すると、ビルド マシンとエージェントから除外されます。
  • ソース管理から最新のものを取得する前に、TeamCity に作業ディレクトリをクリーンアップするように指示します。

トラブルシューティング機能の限界に達しました。テストはビルド マシン上で実行されなくなります。明らかに理由はありません。

私に何ができる?一体何が起こっているのですか?

4

2 に答える 2

1

回避策

このバグが発生している間、継続的インテグレーション ビルドの失敗をデバッグするのにかなりの時間を費やしました。Jetbrains はこの問題に対処していないので、ここに回避策を投稿して、他の人が作業できるようにしようと思いました。

私の問題は、単体テストを実行するステップでビルドが失敗したことでした。偶然にも、失敗したビルドは単体テスト プロジェクトを追加しました。新しく追加された単体テストを除外すると、すべてが正常に実行されました。上記の理由と、Teamcity が例外を適切に処理していないため、デバッグ オプションは制限されています。

手を汚さない解決策は見つかりませんでしたが、できることは次のとおりです。基本的に、ビルド エージェント上のテスト アセンブリに対して MSTest を手動で実行しており、リモート デスクトップ アクセスが必要です。私の場合、Teamcity は次のディレクトリから単体テストを実行しました。

C:\BuildAgent\temp\buildTmp[NAME TIMESTAMP]\Out.

次のコマンドを実行して、失敗したテストを含むアセンブリで MSTest ランナーを開始します。

C:\BuildAgent\temp\buildTmp\Out>"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe" /testcontainer:"C:\BuildAgent\temp\buildTmp[NAME TIMESTAMP] \Assembly.With.Failed.Tests.dll"

出力には、実際にテストが失敗する問題が示されるはずです。私の場合、新しいプロジェクトには、他の単体テスト プロジェクトで使用されているバージョンとは異なるバージョンの Ploeh.AutoFixture への参照が含まれていることがわかりました。

テスト コンテナー 'C:\BuildAgent\temp\buildTmp\Out[NAME TIMESTAMP]\Assembly.With.Failed.Tests.dll' またはその依存関係の 1 つを読み込めません。エラーの詳細: System.IO.FileLoadException: ファイルまたはアセンブリ 'Ploeh.AutoFixture、Version=3.18.10.0、Culture=neutral、PublicKeyToken=b24654c590009d4f' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)。

具体的な問題解決

同様の問題を解決する方法を知りたい場合は、次の手順を実行できます。パッケージ マネージャー コンソールを開き ([表示] -> [その他のウィンドウ] -> [NuGet パッケージ マネージャー])、次のコマンドを実行します。

インストール パッケージ Ploeh.AutoFixture -バージョン 3.18.10.0

これにより、NuGet パッケージが (ドロップダウンで選択されたプロジェクトに) 特定のバージョンで追加されます。すべてのプロジェクトがこの意味で調整されていることを確認してください。

于 2014-08-25T12:42:00.847 に答える