Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

ModuleResolveEventHandler-Delegat

 

Veröffentlicht: Oktober 2016

Stellt die Methode für die Behandlung der ModuleResolve -Ereignis einer Assembly.

Namespace:   System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate Module ModuleResolveEventHandler(
	object sender,
	ResolveEventArgs e
)

Parameter

sender
Type: System.Object

Die Assembly, die die Quelle des Ereignisses war.

e
Type: System.ResolveEventArgs

Die Argumente, die durch das Objekt, das das Ereignis beschrieben wird.

Rückgabewert

Type: System.Reflection.Module

Das Modul, das die Anforderung erfüllt.

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

Das folgende Beispiel zeigt die Reihenfolge der Ausführung, in dem ein Ereignishandler aufgerufen wird. In diesem Beispiel ist Server1 ein externes Modul der MySample-Klasse.

So kompilieren und Ausführen des Beispiels

  1. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, das MySample.cs enthält.

  2. Kompilieren Sie Server1 mit dem folgenden Befehl:

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

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

System_CAPS_noteHinweis

Die Modul-Datei muss Server1.netmodule in einem Unterverzeichnis mit dem Namen "Unterordner" für dieses Beispiel ordnungsgemäß ausgeführt werden.

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;
    }
}

.NET Framework
Verfügbar seit 1.1
Zurück zum Anfang
Anzeigen: