Freigeben über


ModuleResolveEventHandler Delegat

Definition

Stellt die Methode dar, die das ModuleResolve-Ereignis eines Assembly behandelt.

public delegate System::Reflection::Module ^ ModuleResolveEventHandler(System::Object ^ sender, ResolveEventArgs ^ e);
public delegate System.Reflection.Module ModuleResolveEventHandler(object sender, ResolveEventArgs e);
[System.Serializable]
public delegate System.Reflection.Module ModuleResolveEventHandler(object sender, ResolveEventArgs e);
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public delegate System.Reflection.Module ModuleResolveEventHandler(object sender, ResolveEventArgs e);
type ModuleResolveEventHandler = delegate of obj * ResolveEventArgs -> Module
[<System.Serializable>]
type ModuleResolveEventHandler = delegate of obj * ResolveEventArgs -> Module
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ModuleResolveEventHandler = delegate of obj * ResolveEventArgs -> Module
Public Delegate Function ModuleResolveEventHandler(sender As Object, e As ResolveEventArgs) As Module 

Parameter

sender
Object

Die Assembly, die die Quelle des Ereignisses war.

e
ResolveEventArgs

Die Argumente, die vom Objekt bereitgestellt wurden, das das Ereignis beschreibt.

Rückgabewert

Das Modul, das die Anforderung erfüllt.

Attribute

Beispiele

Im folgenden Beispiel wird die Ausführungssequenz veranschaulicht, in der ein Ereignishandler aufgerufen wird. In diesem Beispiel ist Server1 ein externes Modul der MySample-Klasse.

using System;
using System.IO;
using System.Reflection;

class MySample
{
    public static int Main(String[] args)
    {
        Assembly asm1 = typeof(MySample).Assembly;
        asm1.ModuleResolve += new ModuleResolveEventHandler(evModuleResolve);
        Console.WriteLine("Calling MySample.Test...");
        Test();
        return 0;
    }
    private static Module evModuleResolve(object sender, ResolveEventArgs e)
    {
        Console.WriteLine();
        Console.WriteLine("******************************************************");
        Console.WriteLine("* MySample.evModuleResolve() in module: {0:s} *",
            Type.GetType("MySample").Module.ScopeName);
        Console.WriteLine("******************************************************");
        FileStream fs = File.Open("subfolder\\Server1.netmodule", FileMode.Open);
        long len = fs.Length;
        byte[] rgFileBytes = new byte[len];
        fs.Read(rgFileBytes, 0, (int)len);
        Assembly a = typeof(MySample).Assembly;
        Module m = a.LoadModule("Server1.netmodule", rgFileBytes);
        return m;
    }
    private static void Test()
    {
        Console.WriteLine("Instantiating Server1...");
        Server1 s = new Server1();
        Console.WriteLine("Calling Server1.trivial...");
        s.trivial();
    }
}
// Server1 module

using System;
using System.Reflection;

public class Server1 : MarshalByRefObject
{
    public int trivial()
    {
        Console.WriteLine();
        Console.WriteLine("******************************************************");
        Console.WriteLine("*   Server1.trivial() in module: {0:s}   *", this.GetType().Module.ScopeName);
        Console.WriteLine("******************************************************");
        Console.WriteLine("Returning from Server1.trivial...");
        return 1;
    }
}

So kompilieren und führen Sie das Beispiel aus:

  1. Kompilieren Sie Server1 mithilfe des folgenden Befehls:

    csc /out:subfolder\Server1.netmodule /t:module Server1.cs
    
  2. Kompilieren Sie MySample mit dem folgenden Befehl:

    csc /out:MySample.exe /t:exe /addmodule:subfolder\Server1.netmodule MySample.cs
    
  3. Führen Sie MySample.exe aus.

Hinweis

Die Moduldatei Server1.netmodule muss sich in einem Unterverzeichnis namens "Unterordner" befinden, damit dieses Beispiel ordnungsgemäß funktioniert.

Hinweise

Wenn das Common Language Runtime-Klassenladeprogramm einen Verweis auf ein internes Modul einer Assembly nicht normal auflösen kann, wird dieses Ereignis ausgelöst. Der Ereignishandler für diesen Delegaten muss ein Modul suchen und zurückgeben, das die Anforderung erfüllt.

Erweiterungsmethoden

GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird.

Gilt für: