ModuleResolveEventHandler Delegato

Definizione

Rappresenta il metodo che gestirà l'evento ModuleResolve di un oggetto Assembly.Represents the method that will handle the ModuleResolve event of an Assembly.

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

Parametri

sender
Object

Assembly che ha dato origine all'evento.The assembly that was the source of the event.

e
ResolveEventArgs

Argomenti forniti dall'oggetto che descrive l'evento.The arguments supplied by the object describing the event.

Valore restituito

Module

Il modulo che soddisfa la richiesta.The module that satisfies the request.

Ereditarietà
ModuleResolveEventHandler
Attributi

Esempio

Nell'esempio seguente viene illustrata la sequenza di esecuzione in cui viene chiamato un gestore eventi.The following example demonstrates the sequence of execution in which an event handler is called. In questo esempio Server1 è un modulo esterno della classe di esempio.In this example, Server1 is an external module of the MySample class.

Per compilare ed eseguire l'esempioTo compile and run the example

  1. Aprire una finestra del prompt dei comandi e passare alla directory che contiene MySample.cs.Open a Command Prompt window and navigate to the directory that contains MySample.cs.

  2. Compilare Server1 usando il comando seguente:Compile Server1 using the following command:

    csc /out:subfolder\Server1.netmodule /t:module Server1.cs  
    
  3. Compilare l'esempio usando il comando seguente:Compile MySample using the following command:

    csc /out:MySample.exe /t:exe /addmodule:subfolder\Server1.netmodule MySample.cs  
    
  4. Eseguire il file Sample. exe.Run MySample.exe.

Nota

Per il corretto funzionamento di questo esempio, il file di modulo Server1. netmodule deve trovarsi in una sottodirectory denominata "sottocartella".The module file Server1.netmodule must be in a subdirectory named "subfolder" for this example to work properly.

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

Commenti

Se il caricatore della classe Common Language Runtime non riesce a risolvere un riferimento a un modulo interno di un assembly in modo normale, viene generato questo evento.If the common language runtime class loader cannot resolve a reference to an internal module of an assembly through normal means, this event is raised. Il gestore eventi per questo delegato deve individuare e restituire un modulo che soddisfi la richiesta.The event handler for this delegate must locate and return a module that satisfies the request.

Metodi di estensione

GetMethodInfo(Delegate)

Ottiene un oggetto che rappresenta il metodo rappresentato dal delegato specificato.Gets an object that represents the method represented by the specified delegate.

Si applica a