Ler em inglês

Compartilhar via


ModuleResolveEventHandler Delegar

Definição

Representa o método que manipulará o evento ModuleResolve de um Assembly.

C#
public delegate System.Reflection.Module ModuleResolveEventHandler(object sender, ResolveEventArgs e);
C#
[System.Serializable]
public delegate System.Reflection.Module ModuleResolveEventHandler(object sender, ResolveEventArgs e);
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public delegate System.Reflection.Module ModuleResolveEventHandler(object sender, ResolveEventArgs e);

Parâmetros

sender
Object

O assembly que era a origem do evento.

e
ResolveEventArgs

Os argumentos fornecidos pelo objeto que descreve o evento.

Valor Retornado

O módulo que satisfaz à solicitação.

Atributos

Exemplos

O exemplo a seguir demonstra a sequência de execução na qual um manipulador de eventos é chamado. Neste exemplo, Server1 é um módulo externo da classe MySample.

C#
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();
    }
}
C#
// 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;
    }
}

Para compilar e executar o exemplo:

  1. Compile Server1 usando o seguinte comando:

    Console
    csc /out:subfolder\Server1.netmodule /t:module Server1.cs
    
  2. Compile MySample usando o seguinte comando:

    Console
    csc /out:MySample.exe /t:exe /addmodule:subfolder\Server1.netmodule MySample.cs
    
  3. Execute MySample.exe.

Observação

O arquivo de módulo Server1.netmodule deve estar em um subdiretório chamado "subpasta" para que este exemplo funcione corretamente.

Comentários

Se o carregador de classe common language runtime não puder resolve uma referência a um módulo interno de um assembly por meios normais, esse evento será gerado. O manipulador de eventos para esse delegado deve localizar e retornar um módulo que atenda à solicitação.

Métodos de Extensão

GetMethodInfo(Delegate)

Obtém um objeto que representa o método representado pelo delegado especificado.

Aplica-se a

Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1