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 인스턴스에서 제공하는 격리 메커니즘을 대체합니다.

참고

런타임의 사용량

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

  • AssemblyLoadContext.Default 는 애플리케이션 주 어셈블리 및 해당 정적 종속성에 사용되는 런타임의 기본 컨텍스트를 나타냅니다.
  • 이 메서드는 Assembly.LoadFile(String) 가장 기본적인 AssemblyLoadContext어셈블리를 인스턴스화하여 로드하는 어셈블리를 격리합니다. 종속성 확인 없이 각 어셈블리를 자체 AssemblyLoadContext 적으로 로드하는 간단한 격리 체계가 있습니다.

애플리케이션 사용 현황

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

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

  1. 이 메서드는 AssemblyLoadContext.Load(AssemblyName) 어셈블리를 AssemblyLoadContext 확인, 로드 및 반환할 수 있는 첫 번째 기회를 제공합니다. 메서드가 AssemblyLoadContext.Load(AssemblyName) 반환 null되면 로더는 어셈블리를 .에 AssemblyLoadContext.Default로드하려고 합니다.
  2. 어셈블리를 AssemblyLoadContext.Default 확인할 수 없는 경우 원본 AssemblyLoadContext 은 어셈블리를 확인할 수 있는 두 번째 기회를 얻습니다. 런타임은 이벤트를 발생합니다 Resolving .

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

기술 과제

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

    주의

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

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

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

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

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

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

생성자

AssemblyLoadContext()

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

AssemblyLoadContext(Boolean)

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

AssemblyLoadContext(String, Boolean)

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

속성

All

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

Assemblies

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

CurrentContextualReflectionContext

가장 최근에 호출로 인해 EnterContextualReflection()으로 설정된 AssemblyLoadContext를 가져옵니다.

Default

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

IsCollectible

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

Name

AssemblyLoadContext의 이름을 가져옵니다.

메서드

EnterContextualReflection()

CurrentContextualReflectionContextthisAssemblyLoadContext로 설정합니다.

EnterContextualReflection(Assembly)

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

Equals(Object)

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

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

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

GetAssemblyName(String)

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

GetHashCode()

기본 해시 함수로 작동합니다.

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

지정된 Assembly를 포함하는 AssemblyLoadContext입니다.

GetType()

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

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

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

LoadFromAssemblyName(AssemblyName)

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

LoadFromAssemblyPath(String)

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

LoadFromNativeImagePath(String, String)

지정된 경로에서 관리 어셈블리 파일의 네이티브 이미지 콘텐츠를 로드합니다.

LoadFromStream(Stream)

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

LoadFromStream(Stream, Stream)

관리 어셈블리가 포함되고 경우에 따라 어셈블리에 대한 기호가 포함되는 COFF(공용 개체 파일 형식) 기반 이미지를 사용하여 어셈블리를 로드합니다.

LoadUnmanagedDll(String)

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

LoadUnmanagedDllFromPath(String)

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

MemberwiseClone()

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

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

이 로드 컨텍스트의 최적화 프로필이 저장되는 루트 경로를 설정합니다.

StartProfileOptimization(String)

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

ToString()

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

ToString()

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

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

AssemblyLoadContext의 언로드를 시작합니다.

이벤트

Resolving

이 어셈블리 로드 컨텍스트에 로드하려고 할 때 어셈블리를 확인하는 데 실패하는 경우 발생합니다.

ResolvingUnmanagedDll

네이티브 라이브러리를 확인하지 못할 경우에 발생합니다.

Unloading

AssemblyLoadContext를 언로드하는 경우 발생합니다.

적용 대상

추가 정보