AppDomain.TypeResolve イベント
型の解決が失敗したときに発生します。
Public Overridable Event TypeResolve As ResolveEventHandler
[C#]
public virtual event ResolveEventHandler TypeResolve;
[C++]
public: virtual __event ResolveEventHandler* TypeResolve;
[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。
イベント データ
イベント ハンドラが、このイベントに関連するデータを含む、ResolveEventArgs 型の引数を受け取りました。次の ResolveEventArgs プロパティには、このイベントの固有の情報が記載されます。
プロパティ | 説明 |
---|---|
Name | 解決する項目の名前を取得します。 |
解説
TypeResolve イベントは、共通言語ランタイムが要求された型を作成できるアセンブリを判別できなかったときに発生します。このイベントは、型が動的アセンブリで定義されている場合、または動的アセンブリでは定義されていないが、ランタイムが型を定義しているアセンブリを判別できない場合に、発生することがあります。後者は、 Type.GetType をアセンブリ名で限定されていない型の名前で呼び出したときに発生することがあります。
このイベントの ResolveEventHandler で、型の検索と作成を試行できます。
ただし、型を特定のアセンブリで見つけることができないことをランタイムが認識している場合は、 TypeResolve イベントは発生しません。たとえば、静的アセンブリへ動的に型を追加できないことをランタイムが認識しているという理由で静的アセンブリで型を見つけることができない場合、このイベントは発生しません。
このイベントに対するイベント ハンドラを登録するには、Permissions のセクションで説明したアクセス許可が必要です。適切なアクセス許可がない場合は、SecurityException が発生します。
イベント処理の詳細については、「 イベントの利用 」を参照してください。
使用例
[Visual Basic, C#, C++] TypeResolve イベントのサンプルを次に示します。
[Visual Basic, C#, C++] このコード例を実行するには、アセンブリの完全限定名を指定する必要があります。アセンブリの完全限定名を取得する方法については、「 アセンブリ名 」を参照してください。
Imports System
Imports System.Reflection
Imports System.Windows.Forms
Module Test
Sub Main()
' You must supply a valid fully qualified assembly name here.
FindType("System.Windows.Forms.TextBox, System.Windows.FormsSystem.Windows.Forms, Version, Culture, PublicKeyToken")
' OK!
FindType("System.Windows.Forms.TextBox")
' Failed!
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
AddHandler currentDomain.TypeResolve, AddressOf MyResolver
FindType("System.Windows.Forms.TextBox")
' OK!
End Sub 'Main
Sub FindType(name As String)
Try
Dim t As Type = Type.GetType(name, True)
Console.WriteLine(t.FullName)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub 'FindType
Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
Console.WriteLine("MyResolver fired...")
Return GetType(TextBox).Assembly
End Function 'MyResolver
End Module 'Test
[C#]
using System;
using System.Reflection;
using System.Windows.Forms;
class Test {
public static void Main() {
// You must supply a valid fully qualified assembly name here.
FindType("System.Windows.Forms.TextBox, System.Windows.Forms, Version, Culture, PublicKeyToken");
// OK!
FindType("System.Windows.Forms.TextBox");
// Failed!
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.TypeResolve += new ResolveEventHandler(MyResolver);
FindType("System.Windows.Forms.TextBox");
// OK!
}
static void FindType(string name) {
try {
Type t = Type.GetType(name, true);
Console.WriteLine(t.FullName);
} catch (Exception e) {
Console.WriteLine(e.Message);
}
}
static Assembly MyResolver(object sender, ResolveEventArgs args) {
Console.WriteLine("MyResolver fired...");
return typeof(TextBox).Assembly;
}
}
[C++]
#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Windows::Forms;
__gc class Test {
static void FindType(String* name) {
try {
Type* t = Type::GetType(name, true);
Console::WriteLine(t->FullName);
} catch (Exception* e) {
Console::WriteLine(e->Message);
}
}
static Assembly* MyResolver(Object* sender, ResolveEventArgs* args) {
Console::WriteLine(S"MyResolver fired...");
return __typeof(TextBox)->Assembly;
}
public:
static void test() {
// You must supply a valid fully qualified assembly name here.
FindType(S"System.Windows.Forms.TextBox, System.Windows.Forms, Version, Culture, PublicKeyToken");
// OK!
FindType(S"System.Windows.Forms.TextBox");
// Failed!
AppDomain* currentDomain = AppDomain::CurrentDomain;
currentDomain->TypeResolve += new ResolveEventHandler(0, MyResolver);
FindType(S"System.Windows.Forms.TextBox");
// OK!
}
};
int main(){
Test::test();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- SecurityPermission (このイベントのイベント ハンドラを作成するために必要なアクセス許可) SecurityAction.LinkDemand (関連する列挙体)