1

特定の DLL の "Copy Local" を false に設定して、AssemblyResolve をトリガーしています。AssemblyResolve がトリガーされ、DLL の場所を選択できるようになります。

コードの後半で、新しい DLL の場所を指定できるように AssemblyResolve を再トリガーする必要がありますが、最初の AssemblyResolve の DLL が正常に読み込まれたため、新しい DLL を再読み込みできません。

現在の DLL をクリアして再ロードする方法はありますか? またはそのような何か???

ありがとう!

4

3 に答える 3

4

それを実現するには、Assembly.LoadFile() を使用する必要があります。AssemblyResolve でそれを行うことはできません。CLR はアセンブリの再読み込みを非常に慎重に回避します。これは、同じクラスの異なるバージョンが混在する可能性があるためです。いくつかのメソッドはあるバージョンに対して、いくつかは別のバージョンに対してジッティングされています。どちらを保証する方法もなく、陽気さが続きます。

ただし、LoadFile() は、非常に創造的で診断が難しい方法で、足を撃ち、顔を爆破する銃です。1 つの喜びは、まったく同じ型が 2 回読み込まれたときに互換性がないことです。これは考え直したほうがいい。

于 2011-03-14T21:06:21.507 に答える
0

実行中のプログラムでそれを行うことをどのくらい想像できますか? そしてもっと重要なのはなぜですか?アセンブリは、一部の実行可能コードの作業バージョンを表します。同じランタイムで別の現実を持ちたいのはなぜですか。目的がわかりません。これはおそらく設計上の欠陥を示していますか? コードで別の ApplicationDomain を作成して、必要なアセンブリを使用してアプリを再度読み込むことができます..しかし、なぜですか?

ルーク

于 2011-03-14T20:45:37.183 に答える