AppDomain.TypeResolveは私の目には不思議です。誰かがこのイベントをトリガーするサンプルコードを提供できますか?
ありがとう。
Type t = Type.GetType("Class1");
それをします。
MSDNから: 「TypeResolveイベントは、共通言語ランタイムが要求された型を作成できるアセンブリを判別できない場合に発生します。これは、型が動的アセンブリで定義されている場合、または型が動的アセンブリで定義されていない場合に発生する可能性があります。ランタイムは、タイプがどのアセンブリで定義されているかを認識していません。後者の状況は、Type..::。GetTypeがアセンブリ名で修飾されていないタイプ名で呼び出された場合に発生する可能性があります。」
MSDNは、このイベントがいつ発生するかについてかなり明確です。
TypeResolveイベントは、共通言語ランタイムが要求された型を作成できるアセンブリを判別できない場合に発生します。これは、タイプが動的アセンブリで定義されている場合、またはタイプが動的アセンブリで定義されていないが、ランタイムがタイプが定義されているアセンブリを認識していない場合に発生する可能性があります。後者の状況は、Type.GetTypeがアセンブリ名で修飾されていないタイプ名。
このコードはイベントをトリガーします:
AppDomain.CurrentDomain.TypeResolve += delegate(object sender, ResolveEventArgs e)
{
Console.WriteLine("Trying to resolve '{0}'", e.Name);
return null;
};
Type type = Type.GetType("SomeNamespace.SomeTypeWithoutAssemblyQualifier");
AppDomain.TypeResolveイベントは、デフォルトで解決できないタイプをリクエストするたびに発生します。通常、これは発生しません。これは、依存関係が常に実行可能ファイル(デフォルト)またはGACと同じ場所にあるためです。
ただし、強制的に発生させるのは簡単です。ただ行う:
Type badType = Type.GetType("IDontExist");
タイプが存在しないため、イベントを呼び出してタイプを「検索」しようとします。