다음을 통해 공유


ModuleResolveEventHandler 대리자

AssemblyModuleResolve 이벤트를 처리할 메서드를 나타냅니다.

네임스페이스: System.Reflection
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Function ModuleResolveEventHandler ( _
    sender As Object, _
    e As ResolveEventArgs _
) As Module
‘사용 방법
Dim instance As New ModuleResolveEventHandler(AddressOf HandlerMethod)
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public delegate Module ModuleResolveEventHandler (
    Object sender,
    ResolveEventArgs e
)
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public delegate Module^ ModuleResolveEventHandler (
    Object^ sender, 
    ResolveEventArgs^ e
)
/** @delegate */
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public delegate Module ModuleResolveEventHandler (
    Object sender, 
    ResolveEventArgs e
)
JScript에서는 대리자를 사용할 수 있지만 새로 선언할 수는 없습니다.

매개 변수

  • sender
    이벤트 소스인 어셈블리입니다.
  • e
    이벤트를 설명하는 개체에서 제공한 인수입니다.

설명

Assembly 대리자를 만드는 경우 이벤트를 처리할 메서드를 결정합니다. 이벤트를 이벤트 처리기와 연결하려면 대리자의 인스턴스를 해당 이벤트에 추가합니다. 대리자를 제거하지 않으면 이벤트가 발생할 때마다 이벤트 처리기가 호출됩니다. 이벤트 처리기 대리자에 대한 자세한 내용은 이벤트 및 대리자를 참조하십시오.

공용 언어 런타임의 클래스 로더가 일반적인 방법으로 어셈블리의 내부 모듈에 대한 참조를 확인할 수 없으면 콜백에서 모듈을 찾거나 로드한 다음 반환하도록 하는 이벤트가 발생합니다.

DelegateMulticastDelegate의 각 파생 클래스에는 생성자 및 Invoke 메서드가 있습니다. Delegate에 대한 설명에 제공에 Managed Extensions for C++ 코드 예제를 참조하십시오.

예제

다음 예제에서는 이벤트 처리기가 호출되는 실행 순서를 보여 줍니다. 이 예제에서 Server1은 MySample 클래스의 외부 모듈입니다.

예제를 컴파일하고 실행하려면

명령 프롬프트 창을 열고 MySample.cs가 포함된 디렉터리로 이동합니다.

다음 명령을 사용하여 Server1을 컴파일합니다.

csc /out:subfolder\Server1.netmodule /t:module Server1.cs

다음 명령을 사용하여 MySample을 컴파일합니다.

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

MySample.exe를 실행합니다.

참고

이 예제가 제대로 작동하려면 모듈 파일 Server1.netmodule이 "subfolder"라는 하위 디렉터리에 있어야 합니다.

using System;
using System.Reflection;
public class Server1 : MarshalByRefObject 
{
    public int trivial()
    {
        Console.WriteLine ("server1.trivial");
        return 1;
    }
}
using System;
using System.IO;
using System.Reflection;
class MySample
{
    public static int Main(String[] args)
    {
        Assembly asm1 = Assembly.GetExecutingAssembly();
        asm1.ModuleResolve += new ModuleResolveEventHandler (evModuleResolve);
        Console.WriteLine("Calling MySample.Test");
        Test();
        return 0;
    }
    private static Module evModuleResolve(object sender, ResolveEventArgs e)
    {
        Console.WriteLine("MySample.evModuleResolve");
        FileStream fs = File.Open("subfolder\\Server1.netmodule", FileMode.Open);
        byte [] rgFileBytes = new byte [1];
        long len = fs.Length;
        rgFileBytes = new byte[len];
        fs.Read(rgFileBytes, 0, (int)len);
        Assembly a = Assembly.GetExecutingAssembly();
        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();
    }    
}

플랫폼

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

참고 항목

참조

System.Reflection 네임스페이스