アセンブリが解決される前に呼び出される、フックできるイベントはありますか。
たとえば、AppDomain の一部のコードが Assembly.Load(path) を呼び出している場合、このアセンブリを読み込もうとしているというイベントが発生しますか?
これは、一部のコンポーネントでハードコーディングされている可能性のあるアセンブリの読み込みをリダイレクトするのに役立ちます。
可能であれば、構成からこれを行うことも有効なオプションです。
助言がありますか ?
アセンブリが解決される前に呼び出される、フックできるイベントはありますか。
たとえば、AppDomain の一部のコードが Assembly.Load(path) を呼び出している場合、このアセンブリを読み込もうとしているというイベントが発生しますか?
これは、一部のコンポーネントでハードコーディングされている可能性のあるアセンブリの読み込みをリダイレクトするのに役立ちます。
可能であれば、構成からこれを行うことも有効なオプションです。
助言がありますか ?
いいえ、そのようなイベントはありません。考えられるハックの 1 つは、AppDomainSetup.ApplicationBase プロパティを意図的に誤って構成して、CLR がアセンブリをまったく見つけられないようにすることです。その場合、AppDomain.AssemblyResolve イベントが発生し、独自のアセンブリ解決スキームを実装できるようになります。
ドキュメントから、このプロセスの開始時にイベントがスローされないようです。したがって、(可能であれば)次のようなものを書き、それを最後まで使用することをお勧めします。
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
次に、アセンブリをロードするときに、コード内の任意の場所でこのメソッドを使用できます。
明らかに、アセンブリの読み込みを防止したり、別のことをしたりするために、そのデリゲート (パスだけでなく) で適切なオブジェクトを使用したい場合があります。