2011-07-10 18 views
0

呼び出すことができるイベントがありますか?BEFOREアセンブリが解決されました。* ATTEMPTED *アセンブリ解決のために呼び出されるAppDomainイベント

たとえば、AppDomainのコードがAssembly.Load(path)を呼び出している場合、このアセンブリがロードされようとしているというイベントが発生しますか?

これは、一部のコンポーネントでハードコードされている可能性のあるアセンブリのロードをリダイレクトする場合に便利です。

これを構成からも実行することは、可能であれば有効なオプションです。

提案がありますか?

答えて

1

ドキュメントから、このプロセスの開始時にイベントがスローされないことがわかります。したがって、私はあなたが以下のようなものを書いて、スルーアウトそれを使用すること、(可能であれば)お勧め:あなたがアセンブリをロードする際

public static class AssemblyLoader 
{ 
    public delegate void LoadDelegate(string path); 

    public void LoadAssembly(string path) 
    { 
     if(OnPreLoad != null) 
      OnPreLoad(path); 
     // load assembly here 
    } // eo LoadAssembly 

    public event LoadDelegate OnPreLoad; 
} // eo AssemblyLoader 

その後、あなたはあなたのコード内の任意の場所にこの方法を使用することができます。

もちろん、アセンブリの読み込みを防止するために、または代わりに別の何かを実行するために、その代理人(パスだけでなく)に適切なオブジェクトを使用することもできます。

+0

私が抱えている問題は、アセンブリ読み込みコードが私によって書かれていないことです(サードパーティ製)。このコードは、ハードコードされた場所を使用してプラグインを解決します。私はこのプロセスを横取りし、自分自身の場所を提供できるようにしたいと思います。なぜなら、このサードパーティを使用するアプリケーションの配布に問題が生じるからです。 –

+0

@liortal、ああ、私はそれについて疑問を抱いていました。実際には、アセンブリをロードするプロセスを制御できない場合、この方法はうまくいかないでしょう。 –

3

いいえ、このようなイベントはありません。可能性のあるハックの1つは、意図的にAppDomainSetup.ApplicationBaseプロパティを誤って構成して、CLRがアセンブリを検出できないようにすることです。この場合、AppDomain.AssemblyResolveイベントが発生し、独自のアセンブリ解決スキームを実装できます。

関連する問題