0

C#.net3.5アプリケーションを構築しています。

dll「CommonDll」を参照するexe「MainApp」があります

CommonDllは、別のdll'LoadedDll'を動的にロードし、func()と呼ばれるメソッドを動的に呼び出します。

「LoadedDll」は「CommonDll」を参照します

'CommonDll'には、func()が呼び出しているメソッドfoo()があります。

    func()
    {
        foo();
    }

だから、私たちがこれまでに持っているもの:

MainApp ==> CommonDll == Dynamicly ==> LoadedDll

LoadedDll==>CommonDll。

メソッドfoo()を変更してブール引数を取得するまで、すべてが正常に機能しました。foo(bool val); 'LoadedDll'のfunc()も変更しました

func()
{
foo(true);
}

バージョン1.0にはMainApp(古いCommonDllを参照)があり、バージョン1.1にはLoadedDll(新しいCommonDllを参照)があります。

何らかの理由で、メソッドfooに「MethodNotFoundExcepion」が表示され、ブール引数を取得するfooが見つからないと表示されます。

なぜこうなった?LoadedDllは、更新されたCommonDllへの静的参照を使用しているのに、なぜそのメソッドが見つからないのでしょうか。

また、例外は、動的にロードされる'func()'メソッドが見つからないことを示していませんが、fooメソッドが見つからないことを示しています。

編集:

GACでdllを探しましたが、そこにありません。すでにメモリにある古いdllが新しいものではなく読み込まれる別の理由がありますか?

4

2 に答える 2

0

私は問題の理由を理解しました。

dllバージョンを一定の値に変更する外部コードがいくつかあったため、厳密な名前は同じでした。

一番下の行:dllをロードしてから、同じ強い名前の別のdllをロードしようとすると、最初のdllが使用されます。

同じ名前の2つのdllをロードするには、それらは異なる厳密な名前を持っている必要があります。

于 2012-09-19T11:53:46.963 に答える
0

それは私にも起こりました。dllを動的にロードしていたディレクトリからすべての余分なdll(以前にメインexeでロードされた依存関係)を削除しました。あなたの答えの理由は正しいです。

于 2012-10-10T08:45:52.033 に答える