내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

AppDomain.AssemblyResolve 이벤트

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

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

public event ResolveEventHandler AssemblyResolve

구현

_AppDomain.AssemblyResolve

ResolveEventArgs.Name 속성에 지정된 어셈블리를 반환하거나 어셈블리가 인식되지 않은 경우 null을 반환하는 작업은 이 이벤트에 대한 ResolveEventHandler에서 수행됩니다. 어셈블리는 실행 컨텍스트에 로드되어야 합니다. 리플렉션 전용 컨텍스트에 로드된 경우 이 이벤트를 발생시킨 로드는 실패합니다.

이 이벤트에 대한 사용 지침은 어셈블리 로드 해결 를 참조하십시오.

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

중요중요

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

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

중요중요

둘 이상의 이벤트 처리기가 이 이벤트에 대한 등록을 하는 경우, 이벤트 처리기가 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;
    }
}


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

  • SecurityCriticalAttribute 

    직접 실행 호출자에 대한 완전 신뢰가 필요합니다. 이 멤버는 부분적으로 신뢰할 수 있거나 투명한 코드에서 사용할 수 없습니다.

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

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

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft