ModuleResolveEventHandler 代理人

定義

AssemblyModuleResolve イベントを処理するメソッドを表します。Represents the method that will handle the ModuleResolve event of an Assembly.

public delegate System::Reflection::Module ^ ModuleResolveEventHandler(System::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 

パラメーター

sender
Object

イベントのソースであるアセンブリ。The assembly that was the source of the event.

e
ResolveEventArgs

イベントを記述しているオブジェクトによって提供されている引数。The arguments supplied by the object describing the event.

戻り値

Module

要求を満たすモジュール。The module that satisfies the request.

継承
ModuleResolveEventHandler
属性

次の例は、イベントハンドラーが呼び出される実行シーケンスを示しています。The following example demonstrates the sequence of execution in which an event handler is called. この例では、Server1 は MySample クラスの外部モジュールです。In this example, Server1 is an external module of the MySample class.

例をコンパイルして実行するにはTo compile and run the example

  1. コマンドプロンプトウィンドウを開き、MySample.cs が格納されているディレクトリに移動します。Open a Command Prompt window and navigate to the directory that contains MySample.cs.

  2. 次のコマンドを使用して、Server1 をコンパイルします。Compile Server1 using the following command:

    csc /out:subfolder\Server1.netmodule /t:module Server1.cs  
    
  3. 次のコマンドを使用して、MySample をコンパイルします。Compile MySample using the following command:

    csc /out:MySample.exe /t:exe /addmodule:subfolder\Server1.netmodule MySample.cs  
    
  4. MySample を実行します。Run MySample.exe.

注意

この例を正しく動作させるには、モジュールファイル Server1 を "サブフォルダー" という名前のサブディレクトリに配置する必要があります。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;
    }
}

注釈

共通言語ランタイムクラスローダーが、通常の方法でアセンブリの内部モジュールへの参照を解決できない場合、このイベントが発生します。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. このデリゲートのイベントハンドラーは、要求を満たすモジュールを見つけて返す必要があります。The event handler for this delegate must locate and return a module that satisfies the request.

拡張メソッド

GetMethodInfo(Delegate)

指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。Gets an object that represents the method represented by the specified delegate.

適用対象