AssemblyLoadContext 클래스

정의

어셈블리 로드에 대한 범위에 대한 런타임의 개념을 나타냅니다.

public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
상속
AssemblyLoadContext

설명

AssemblyLoadContext 부하 컨텍스트를 나타냅니다. 개념적으로 로드 컨텍스트는 어셈블리 집합을 로드, 확인 및 언로드하기 위한 범위를 만듭니다.

AssemblyLoadContext 주로 어셈블리 로드 격리를 제공하기 위해 존재합니다. 단일 프로세스 내에서 동일한 어셈블리의 여러 버전을 로드할 수 있습니다. .NET Framework의 여러 AppDomain 인스턴스에서 제공하는 격리 메커니즘을 대체합니다.

Note

런타임의 사용량

런타임은 두 개의 어셈블리 로드 컨텍스트를 구현합니다.

애플리케이션 사용량

애플리케이션은 고급 시나리오에 대한 맞춤 솔루션을 만들기 위해 자체 AssemblyLoadContext을(를) 적용할 수 있습니다. 사용자 지정은 종속성 확인 메커니즘을 정의하는 데 중점을 둡니다.

AssemblyLoadContext는 관리되는 어셈블리 해결을 구현하기 위한 두 가지 확장 지점을 제공합니다.

  1. AssemblyLoadContext.Load(AssemblyName) 메서드는 AssemblyLoadContext가 어셈블리를 확인하고 로드하며 반환할 수 있는 첫 번째 기회를 제공합니다. 메서드가 AssemblyLoadContext.Load(AssemblyName)null로 반환하면 로더는 어셈블리를 AssemblyLoadContext.Default에 로드하려고 시도합니다.
  2. 어셈블리를 AssemblyLoadContext.Default에서 해결할 수 없는 경우, 원래 AssemblyLoadContext이 어셈블리를 해결할 수 있는 두 번째 기회가 준비됩니다. 런타임이 Resolving 이벤트를 발생시킵니다.

또한 가상 메서드를 AssemblyLoadContext.LoadUnmanagedDll(String) 사용하면 관리되지 않는 기본 어셈블리 해상도를 사용자 지정할 수 있습니다. 기본 구현은 null를 반환하여 런타임 검색이 기본 검색 정책을 사용하도록 합니다. 기본 검색 정책은 대부분의 시나리오에 충분합니다.

기술 과제

  • 단일 프로세스에서 여러 버전의 런타임을 로드할 수 없습니다.

    Caution

    여러 복사본 또는 다른 버전의 프레임워크 어셈블리를 로드하면 예기치 않고 진단하기 어려운 동작이 발생할 수 있습니다.

    Tip

    원격 또는 프로세스 간 통신과 함께 프로세스 경계를 사용하여 이 격리 문제를 해결합니다.

  • 어셈블리 로드 타이밍으로 인해 테스트 및 디버깅이 어려울 수 있습니다. 어셈블리는 일반적으로 종속성이 즉시 확인되지 않고 로드됩니다. 종속성은 필요에 따라 로드됩니다.

    • 코드가 종속 어셈블리로 분기되는 경우
    • 코드가 리소스를 로드하는 경우
    • 코드가 어셈블리를 명시적으로 로드하는 경우
  • AssemblyLoadContext.Load(AssemblyName)를 구현하면 서로 다른 버전이 존재할 수 있도록 격리해야 할지도 모르는 새로운 종속성이 추가될 수 있습니다. 가장 자연스러운 구현은 이러한 종속성을 기본 컨텍스트에 배치합니다. 신중한 디자인은 새 종속성을 격리할 수 있습니다.

  • 동일한 어셈블리가 여러 컨텍스트에 여러 번 로드됩니다.

    • 이로 인해 "'Sample.Plugin' 형식의 개체를 'Sample.Plugin' 형식으로 캐스팅할 수 없습니다."와 같은 혼동스러운 오류 메시지가 생성될 수 있습니다.
    • 격리 경계를 넘어 데이터를 정리하고 구성하는 작업은 간단하지 않습니다. 일반적인 솔루션은 기본 로드 컨텍스트로만 로드되는 어셈블리에 정의된 인터페이스를 사용하는 것입니다.

생성자

Name Description
AssemblyLoadContext()

AssemblyLoadContext 클래스의 새 인스턴스를 초기화합니다.

AssemblyLoadContext(Boolean)

언로드를 사용할 수 있는지 여부를 나타내는 값을 사용하여 클래스의 AssemblyLoadContext 새 인스턴스를 초기화합니다.

AssemblyLoadContext(String, Boolean)

언로드를 사용할 수 있는지 여부를 나타내는 이름과 값을 사용하여 클래스의 AssemblyLoadContext 새 인스턴스를 초기화합니다.

속성

Name Description
All

모든 AssemblyLoadContext 인스턴스의 컬렉션을 반환합니다.

Assemblies

에 로드된 Assembly인스턴스의 AssemblyLoadContext 컬렉션을 반환합니다.

CurrentContextualReflectionContext

에 대한 AssemblyLoadContext 가장 최근 호출로 집합을 가져옵니다 EnterContextualReflection().

Default

기본값 AssemblyLoadContext을 가져옵니다. 기본 컨텍스트에는 주 애플리케이션 어셈블리와 정적 종속성이 포함됩니다.

IsCollectible

수집 가능한지 여부를 AssemblyLoadContext 나타내는 값을 가져옵니다.

Name

의 이름을 AssemblyLoadContext가져옵니다.

메서드

Name Description
EnterContextualReflection()

CurrentContextualReflectionContextthis설정합니다AssemblyLoadContext.

EnterContextualReflection(Assembly)

어셈블리를 CurrentContextualReflectionContext 로드한 것으로 설정합니다AssemblyLoadContext.

Equals(Object)

지정된 개체가 현재 개체와 같은지 여부를 확인합니다.

(다음에서 상속됨 Object)
Finalize()

개체가 리소스를 해제하고 가비지 수집에서 회수되기 전에 다른 정리 작업을 수행할 수 있습니다.

GetAssemblyName(String)

AssemblyName 어셈블리 경로에 대한 항목을 가져옵니다.

GetHashCode()

기본 해시 함수로 사용됩니다.

(다음에서 상속됨 Object)
GetLoadContext(Assembly)

지정된 AssemblyLoadContextAssembly 포함하는 값을 가져옵니다.

GetType()

현재 인스턴스의 Type 가져옵니다.

(다음에서 상속됨 Object)
Load(AssemblyName)

파생 클래스에서 재정의되는 경우 어셈블리를 해당 클래스에 AssemblyName따라 확인할 수 있습니다.

LoadFromAssemblyName(AssemblyName)

지정된 어셈블리 AssemblyName를 확인하고 로드합니다.

LoadFromAssemblyPath(String)

지정된 경로에 어셈블리 파일의 내용을 로드합니다.

LoadFromNativeImagePath(String, String)

지정된 경로에 관리되는 어셈블리 파일의 네이티브 이미지 내용을 로드합니다.

LoadFromStream(Stream, Stream)

필요에 따라 어셈블리의 기호를 포함하여 관리되는 어셈블리를 포함하는 COFF(공용 개체 파일 형식) 기반 이미지로 어셈블리를 로드합니다.

LoadFromStream(Stream)

관리되는 어셈블리를 포함하는 COFF(공용 개체 파일 형식) 기반 이미지로 어셈블리를 로드합니다.

LoadUnmanagedDll(String)

파생 클래스에서 이름으로 관리되지 않는 라이브러리를 로드할 수 있습니다.

LoadUnmanagedDllFromPath(String)

지정된 경로에서 관리되지 않는 라이브러리를 로드합니다.

MemberwiseClone()

현재 Object단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
SetProfileOptimizationRoot(String)

이 부하 컨텍스트에 대한 최적화 프로필이 저장되는 루트 경로를 설정합니다.

StartProfileOptimization(String)

지정된 프로필에 대한 프로필 최적화를 시작합니다.

ToString()

이 로드 컨텍스트의 문자열 표현을 반환합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)
Unload()

AssemblyLoadContext언로드를 시작합니다.

이벤트

Name Description
Resolving

이 어셈블리 로드 컨텍스트로 로드하려고 할 때 어셈블리의 확인이 실패할 때 발생합니다.

ResolvingUnmanagedDll

네이티브 라이브러리의 확인이 실패할 때 발생합니다.

Unloading

언로드될 AssemblyLoadContext 때 발생합니다.

적용 대상

추가 정보