2

いくつかの回帰テストを実行するためのテストアプリを書いています。アイデアは、ライブラリの複数のバージョンに対してテストを実行できるようにすることです。私の目標は、キーがバージョン文字列( "3.0.0.0"など)で、値がアセンブリインスタンスであるディクショナリにdllをロードすることです。1つのアセンブリを動的にロードしてそのメソッドを呼び出すことはできますが、2つ目のアセンブリをロードしようとすると、次の例外が発生します。

The located assembly's manifest definition does not match the assembly reference.

次の行でアセンブリをロードしています。

asm = Assembly.LoadFrom(lib, hash, System.Configuration.Assemblies.AssemblyHashAlgorithm.MD5);

'lib'は、dllの完全なファイル名とパスです。「ハッシュ」は、dllのmd5合計です。

Windowsに「このdllを使用してください」と言っているのに、名前を見て「すでに持っています」と表示され、以前にロードされたものを使用しているように見えますが、ハッシュが一致しないため失敗します。元々、ロードされているdllにはアセンブリバージョンが設定されていなかったため、4つの異なるバージョンに設定しましたが、それでも同じ例外がスローされました。

これに対する修正は何ですか?

ジョーダン

4

2 に答える 2

5

同じアセンブリの複数のバージョンを単一のAppDomainに読み込むことはできません。また、一度読み込まれると、アセンブリを AppDomain からアンロードすることはできません (.NET 4 で動的に作成された一時的なアセンブリを除く) が、AppDomain 全体をアンロードすることは可能です (これにより、読み込まれたすべてのアセンブリがアンロードされます)。したがって、アセンブリの各バージョンを個別の (新しく作成された) AppDomain に読み込む必要があります。また、読み込まれたアセンブリへの参照を個々の AppDomain 間で (特に、テスト アプリが存在するメインの AppDomain に) 渡さないように注意してください。再び同じエラーで終了します。

于 2012-04-11T19:36:38.977 に答える
1

アセンブリを個別の AppDomains にする必要があります。

于 2012-04-11T18:58:47.033 に答える