作業ディレクトリにある dll の読み込みを防止し、指定した別の場所で dll を強制的に使用することは可能ですか?
いくつかの単体テストを実行しようとしていますが、この InvalidCast 例外が発生しています:
[A]AssemblyA.DataType は [B]AssemblyA.DataType にキャストできません。タイプ A は、場所 'E:\webservice\bin\AssemblyA\AssemblyA.dll' のコンテキスト 'LoadFrom' の 'AssemblyA, Version=1.0.4645.21698, Culture=neutral, PublicKeyToken=null' に由来します。タイプ B は、'AssemblyA, Version=1.0.4645.21698, Culture=neutral, PublicKeyToken=null' のコンテキスト 'Default' の場所 'E:\TestResults\Out\AssemblyA.dll' に由来します。
テストの起動時に、Assembly.LoadFrom を使用して E:\webservice\bin\AssemblyA\AssemblyA.dll から dll をロードし、いくつかの型を作成してキャッシュに入れる初期化コードを呼び出します。
dll をその場所に xcopy するビルド後のイベントがあるため、両方の場所でまったく同じ dll になります。
しかし、単体テストは E:\testresults\out\ の作業ディレクトリから実行されているため、そこに AssemblyA.dll が自動的に読み込まれ、既に読み込まれているアセンブリは無視されます。Appdomain.AssemblyResolve イベントでその読み込みをインターセプトする機会はありません。
そのため、単体テスト コードが E:\webservice\bin\AssemblyA\AssemblyA.dll からそこに配置されたキャッシュからオブジェクトを取得しようとすると、E:\TestResults\Out\AssemblyA からの型が必要であるため、無効なキャストと表示されます。 .dll
アセンブリの読み込みのベスト プラクティスを見た後、使用したい dll を既に手動で読み込んでいるにもかかわらず、作業ディレクトリから dll を読み込むのを防ぐ方法はないようです。E:\webservice\bin からロードしないようにアプリケーションを変更する以外にオプションはありますか?
(LoadFile または Load byte[] の両方を使用しても、同じエラーが発生します)