2

私はGACにインストールする必要のあるアセンブリを開発しており、ビルド後の手順の一環として、ビルドのたびにGACが更新されるようにしています。(Visual Studio)単体テストを(個別のテストアセンブリで)作成して、テスト対象のクラスで新しいメソッドを呼び出し、テスト対象のクラス(TDDスタイル)にメソッドを実装してから、テストを実行する場合(CTRL R、 T)テスト中のアセンブリと単体テストプロジェクトがビルドされます(アセンブリはGACで更新されます)。

テストは失敗します(新しいメソッドに対してSystem.MissingMethodExceptionをスローします)。テストをデバッグすると、テストに合格し、その後、テストを実行でき、合格します。

調査の一環として、テストに無限ループを追加して実行しました。Process Explorerを使用して、テスト中に読み込まれるdllのパスを見つけました。C:\ WINDOWS \ assembly \ temp\4XY349E7C5にアセンブリへのハンドルがあることがわかりました。ここで見つけたトリックを使用してそのディレクトリを調べると、GACにあるよりも古いバージョンのdllが見つかります。また、Reflectorを使用してdllを調べると、MissingMethodExceptionを説明する追加した新しいメソッドが含まれていないことがわかります。

では、VSTestHost.exeが一時ディレクトリにdllをロードするのはなぜですか?正しいdllが使用されていることを確認する方法はありますか?

4

1 に答える 1

2

この記事を読んだことで、問題の理由がわかりました。VSTestHost.exeは、古いバージョンのアセンブリをロードしたままにします(つまり、gac \ tempフォルダーで参照されているバージョンで、VSTestHostが終了するとフュージョンがアンロードします)。

この問題の解決策は、[ツール]/[オプション]/[テストツール]/[テスト実行]の設定を変更することでした。[テスト間でテスト実行エンジンを実行し続ける]のチェックを外してください。これで、VSTestHostはテストの実行ごとに新しいインスタンスを開始し、GACから正しいバージョンのdllをロードします。

于 2010-01-27T10:51:42.630 に答える