이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

AppDomain.AssemblyResolve 이벤트

 

게시 날짜: 2016년 11월

어셈블리를 확인하지 못할 경우 발생합니다.

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

public event ResolveEventHandler AssemblyResolve

책임은 ResolveEventHandler 는 어셈블리를 반환 하 여 지정 된이 이벤트는 ResolveEventArgs.Name 속성을 또는 어셈블리가 인식 되지 않으면 null을 반환 합니다. 어셈블리는 실행 컨텍스트에 로드 해야 합니다. 리플렉션 전용 컨텍스트에 로드 하는 경우이 이벤트를 발생 시킨 로드는 실패 합니다.

이 이벤트의 사용에 대 한 지침을 참조 하십시오. 어셈블리 로드 해결합니다.

부터는 .NET Framework 4, ResolveEventArgs.RequestingAssembly 속성을 확인할 수 없는 어셈블리 로드를 요청한 어셈블리를 반환 합니다. 예를 들어 로더 수 요청 어셈블리와 해당 종속성 검색 경로에 없기 때문에 요청한 어셈블리의 종속성을 로드할 수 없습니다. 요청한 어셈블리의 id를 알면 종속성의 둘 이상의 버전을 사용할 수 있는 경우 올바른 버전을 확인 또는 종속성을 찾거나에 유용할 수 있습니다. 자세한 내용은 ResolveEventArgs.RequestingAssembly을 참조하십시오.

System_CAPS_important중요

부터는 .NET Framework 4, ResolveEventHandler 리소스 어셈블리를 포함 하는 모든 어셈블리에 대 한 이벤트가 발생 합니다. 이전 버전에서는 리소스 어셈블리에 대 한 이벤트가 발생 하지 않습니다. 운영 체제에 지역화 된 처리기에 여러 번 호출할 수 있습니다: 대체 (fallback) 체인의 각 문화권에 대해 한 번씩입니다.

이 이벤트는 ResolveEventArgs.Name 속성 정책 적용 하기 전에 어셈블리 이름을 반환 합니다.

System_CAPS_important중요

둘 이상의 이벤트 처리기가이 이벤트에 대 한 등록을 하는 경우 이벤트 처리기는 값을 반환할 때까지 순서 대로 이벤트 handlersarecalled 되지 않는 null합니다. 후속 이벤트 처리기는 무시 됩니다.

이벤트를 처리하는 방법은 이벤트 처리 및 발생을 참조하십시오.

다음 샘플을 참조 하십시오.는 AssemblyResolve 이벤트입니다.

이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다. 정규화 된 어셈블리 이름을 확인 하는 방법에 대 한 정보를 참조 하십시오. 어셈블리 이름합니다.

public class MyType
{
    public MyType()
    {
        Console.WriteLine();
        Console.WriteLine("MyType instantiated!");
    }
}

class Test
{
    public static void Main()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;

        // This call will fail to create an instance of MyType since the
        // assembly resolver is not set
        InstantiateMyTypeFail(currentDomain);

        currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

        // This call will succeed in creating an instance of MyType since the
        // assembly resolver is now set.
        InstantiateMyTypeFail(currentDomain);

        // This call will succeed in creating an instance of MyType since the
        // assembly name is valid.
        InstantiateMyTypeSucceed(currentDomain);
    }

    private static void InstantiateMyTypeFail(AppDomain domain)
    {
        // Calling InstantiateMyType will always fail since the assembly info
        // given to CreateInstance is invalid.
        try
        {
            // You must supply a valid fully qualified assembly name here.
            domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static void InstantiateMyTypeSucceed(AppDomain domain)
    {
        try
        {
            string asmname = Assembly.GetCallingAssembly().FullName;
            domain.CreateInstance(asmname, "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
    {
        Console.WriteLine("Resolving...");
        return typeof(MyType).Assembly;
    }
}

SecurityCriticalAttribute

Requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
1.1 이후 사용 가능
Silverlight
2.0 이후 사용 가능
맨 위로 이동
표시: