ModuleResolveEventHandler ModuleResolveEventHandler ModuleResolveEventHandler ModuleResolveEventHandler Delegate

定義

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 Object Object Object

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

e
ResolveEventArgs ResolveEventArgs ResolveEventArgs ResolveEventArgs

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

戻り値

System.Reflection.Module

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

継承
ModuleResolveEventHandlerModuleResolveEventHandlerModuleResolveEventHandlerModuleResolveEventHandler
属性

次の例では、イベント ハンドラーが呼び出される実行の順序を示します。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.exe を実行します。Run MySample.exe.

注意

モジュール ファイル Server1.netmodule は正常に動作するこの例の「サブフォルダー」という名前のサブディレクトリでなければなりません。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) GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate)

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

適用対象