AppDomain.AssemblyResolve イベント
アセンブリの解決が失敗したときに発生します。
Public Overridable Event AssemblyResolve As ResolveEventHandler
[C#]
public virtual event ResolveEventHandler AssemblyResolve;
[C++]
public: virtual __event ResolveEventHandler* AssemblyResolve;
[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。
イベント データ
イベント ハンドラが、このイベントに関連するデータを含む、ResolveEventArgs 型の引数を受け取りました。次の ResolveEventArgs プロパティには、このイベントの固有の情報が記載されます。
プロパティ | 説明 |
---|---|
Name | 解決する項目の名前を取得します。 |
解説
このイベントの ResolveEventHandler で、型、アセンブリ、またはリソースを解決するアセンブリを返す必要があります。
このイベントに対するイベント ハンドラを登録するには、Permissions のセクションで説明したアクセス許可が必要です。適切なアクセス許可がない場合は、SecurityException が発生します。
イベント処理の詳細については、「 イベントの利用 」を参照してください。
使用例
[Visual Basic, C#, C++] AssemblyResolve イベントのサンプルを次に示します。
[Visual Basic, C#, C++] このコード例を実行するには、アセンブリの完全限定名を指定する必要があります。アセンブリの完全限定名を取得する方法については、「 アセンブリ名 」を参照してください。
Public Class MyType
Public Sub New()
Console.WriteLine("MyType instantiated!")
End Sub 'New
End Class 'MyType
Module Test
Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
InstantiateMyType(currentDomain) ' Failed!
AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
InstantiateMyType(currentDomain) ' OK!
End Sub 'Main
Sub InstantiateMyType(domain As AppDomain)
Try
' You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub 'InstantiateMyType
Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As [Assembly]
Console.WriteLine("Resolving...")
Return GetType(MyType).Assembly
End Function 'MyResolveEventHandler
End Module 'Test
[C#]
public class MyType {
public MyType() {
Console.WriteLine("MyType instantiated!");
}
}
class Test {
public static void Main() {
AppDomain currentDomain = AppDomain.CurrentDomain;
InstantiateMyType(currentDomain); // Failed!
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
InstantiateMyType(currentDomain); // OK!
}
static void InstantiateMyType(AppDomain domain) {
try {
// You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
} catch (Exception e) {
Console.WriteLine(e.Message);
}
}
static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
Console.WriteLine("Resolving...");
return typeof(MyType).Assembly;
}
}
[C++]
public __gc class MyType {
public:
MyType() {
Console::WriteLine(S"MyType instantiated!");
}
};
__gc class Test {
public:
static void InstantiateMyType(AppDomain* domain) {
try {
// You must supply a valid fully qualified assembly name here.
domain->CreateInstance(S"Assembly text name, Version, Culture, PublicKeyToken", S"MyType");
} catch (Exception* e) {
Console::WriteLine(e->Message);
}
}
static Assembly* MyResolveEventHandler(Object* sender, ResolveEventArgs* args) {
Console::WriteLine(S"Resolving...");
return __typeof(MyType)->Assembly;
}
};
int main() {
AppDomain* currentDomain = AppDomain::CurrentDomain;
Test::InstantiateMyType(currentDomain); // Failed!
currentDomain->AssemblyResolve += new ResolveEventHandler(0, Test::MyResolveEventHandler);
Test::InstantiateMyType(currentDomain); // OK!
}
[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 (関連する列挙体)