AssemblyLoadContext 클래스

정의

어셈블리 로드 범위의 런타임 개념을 나타냅니다.Represents the runtime's concept of a scope for assembly loading.

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

설명

AssemblyLoadContext는 로드 컨텍스트를 나타냅니다.The AssemblyLoadContext represents a load context. 개념적으로 로드 컨텍스트는 어셈블리 집합을 로드 하 고, 확인 하 고, 잠재적으로 언로드하기 위한 범위를 만듭니다.Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext는 추상 클래스입니다.AssemblyLoadContext is an abstract class. 구체적 클래스를 만들려면 AssemblyLoadContext.Load(AssemblyName) 메서드를 구현 해야 합니다.The AssemblyLoadContext.Load(AssemblyName) method needs to be implemented to create a concrete class.

AssemblyLoadContext는 주로 어셈블리 로드 격리를 제공 하기 위해 존재 합니다.The AssemblyLoadContext exists primarily to provide assembly loading isolation. 단일 프로세스 내에서 동일한 어셈블리의 여러 버전을 로드할 수 있습니다.It allows multiple versions of the same assembly to be loaded within a single process. .NET Framework의 여러 AppDomain 인스턴스에서 제공 하는 격리 메커니즘을 대체 합니다.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

참고

AssemblyLoadContext는 보안 기능을 제공 하지 않습니다.AssemblyLoadContext does not provide any security features. 모든 코드에는 프로세스에 대 한 모든 권한이 있습니다.All code has full permissions of the process.

런타임에 사용Usage in the runtime

런타임은 두 개의 어셈블리 로드 컨텍스트를 구현 합니다.The runtime implements two assembly load contexts:

응용 프로그램 사용Application usage

응용 프로그램은 자체 AssemblyLoadContext을 만들어 고급 시나리오를 위한 사용자 지정 솔루션을 만들 수 있습니다.An application can create its own AssemblyLoadContext to create a custom solution for advanced scenarios. 사용자 지정은 종속성 확인 메커니즘을 정의 하는 데 중점을 둔 것입니다.The customization focuses on defining dependency resolution mechanisms.

AssemblyLoadContext는 관리 되는 어셈블리 확인을 구현 하는 두 가지 확장 지점이 제공 됩니다.The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. AssemblyLoadContext.Load(AssemblyName) 메서드는 AssemblyLoadContext에서 어셈블리를 확인 하 고 로드 하 고 반환할 수 있는 첫 번째 기회를 제공 합니다.The AssemblyLoadContext.Load(AssemblyName) method provides the first chance for the AssemblyLoadContext to resolve, load, and return the assembly. AssemblyLoadContext.Load(AssemblyName) 메서드가 null를 반환 하는 경우 로더에서 AssemblyLoadContext.Default에 어셈블리를 로드 하려고 시도 합니다.If the AssemblyLoadContext.Load(AssemblyName) method returns null, the loader tries to load the assembly into the AssemblyLoadContext.Default.
  2. AssemblyLoadContext.Default에서 어셈블리를 확인할 수 없는 경우 원래 AssemblyLoadContext는 어셈블리를 확인 하는 두 번째 기회를 가져옵니다.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. 런타임이 Resolving 이벤트를 발생 시킵니다.The runtime raises the Resolving event.

또한 AssemblyLoadContext.LoadUnmanagedDll(String) 가상 메서드를 사용 하 여 관리 되지 않는 기본 어셈블리 확인을 사용자 지정할 수 있습니다.Additionally, the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. 기본 구현에서는 런타임 검색에서 기본 검색 정책을 사용 하는 null를 반환 합니다.The default implementation returns null, which causes the runtime search to use its default search policy. 대부분의 시나리오에서 기본 검색 정책은 충분 합니다.The default search policy is sufficient for most scenarios.

기술 과제Technical challenges

  • 단일 프로세스에서 여러 버전의 런타임을 로드할 수는 없습니다.It is not possible to load multiple versions of the runtime in a single process.

    주의

    여러 복사본이 나 다른 버전의 프레임 워크 어셈블리를 로드 하면 예기치 않은 동작이 발생할 수 있습니다.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard-to-diagnose behavior.

    원격 또는 프로세스 간 통신에서 프로세스 경계를 사용 하 여이 격리 문제를 해결 합니다.Use process boundaries with remoting or interprocess communication to solve this isolation problem.

  • 어셈블리 로드 타이밍을 사용 하면 테스트 및 디버깅을 어렵게 만들 수 있습니다.The timing of assembly loading can make testing and debugging difficult. 어셈블리는 일반적으로 종속성을 확인 하지 않고 즉시 로드 됩니다.Assemblies are typically loaded without their dependencies immediately being resolved. 필요에 따라 종속성이 로드 됩니다.The dependencies are loaded as they are needed:

    • 코드가 종속 어셈블리로 분기 될 때.When code branches into a dependent assembly.
    • 코드에서 리소스를 로드 하는 경우When code loads resources.
    • 코드가 어셈블리를 명시적으로 로드 하는 경우When code explicitly loads assemblies.
  • AssemblyLoadContext.Load(AssemblyName) 구현에서는 서로 다른 버전을 사용할 수 있도록 격리 해야 하는 새 종속성을 추가할 수 있습니다.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies that may need to be isolated to allow different versions to exist. 가장 자연 스러운 구현은 이러한 종속성을 기본 컨텍스트에 넣습니다.The most natural implementation would place these dependencies in the default context. 신중한 디자인은 새 종속성을 격리할 수 있습니다.Careful design can isolate the new dependencies.

  • 동일한 어셈블리가 여러 번 여러 컨텍스트에 로드 됩니다.The same assembly is loaded multiple times into different contexts.

    • 이로 인해 오류 메시지가 혼란 스 러 울 수 있습니다. 예를 들어 "' 플러그 인 형식의 개체를 ' 플러그 인 ' 형식으로 캐스팅할 수 없습니다.This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'".
    • 격리 경계를 넘어 마샬링하는 것은 중요 하지 않습니다.Marshaling across isolation boundaries is non-trivial. 일반적인 솔루션은 기본 로드 컨텍스트에만 로드 되는 어셈블리에 정의 된 인터페이스를 사용 하는 것입니다.A typical solution is to use an interface defined in an assembly that's only loaded into the default load context.

생성자

AssemblyLoadContext()

AssemblyLoadContext 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the AssemblyLoadContext class.

AssemblyLoadContext(Boolean)

언로드 사용 여부를 나타내는 값을 사용하여 AssemblyLoadContext 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

AssemblyLoadContext(String, Boolean)

언로드 사용 여부를 나타내는 값과 이름을 사용하여 AssemblyLoadContext 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

속성

All

모든 AssemblyLoadContext 인스턴스 컬렉션을 반환합니다.Returns a collection of all AssemblyLoadContext instances.

Assemblies

Assembly에 로드된 AssemblyLoadContext 인스턴스의 컬렉션을 반환합니다.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext

가장 최근에 호출로 인해 AssemblyLoadContext으로 설정된 EnterContextualReflection()를 가져옵니다.Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

Default

기본 AssemblyLoadContext를 가져옵니다.Gets the default AssemblyLoadContext. 기본 컨텍스트에는 주 애플리케이션 어셈블리 및 해당 정적 종속성이 포함됩니다.The default context contains the main application assembly and its static dependencies.

IsCollectible

AssemblyLoadContext가 수집 가능한지를 나타내는 값을 가져옵니다.Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name

AssemblyLoadContext의 이름을 가져옵니다.Get the name of the AssemblyLoadContext.

메서드

EnterContextualReflection()

CurrentContextualReflectionContextthisAssemblyLoadContext로 설정합니다.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

CurrentContextualReflectionContext를 어셈블리를 로드한 AssemblyLoadContext로 설정합니다.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object)

지정한 개체가 현재 개체와 같은지를 확인합니다.Determines whether the specified object is equal to the current object.

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

가비지 수집에서 회수하기 전에 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다.Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

GetAssemblyName(String)

어셈블리 경로에 대한 AssemblyName을 가져옵니다.Gets an AssemblyName for an assembly path.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

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

지정된 AssemblyLoadContext를 포함하는 Assembly입니다.Gets the AssemblyLoadContext containing the specified Assembly.

GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

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

파생된 클래스에서 재정의될 때 해당 AssemblyName에 따라 어셈블리를 확인하고 로드할 수 있습니다.When overridden in a derived class, allows an assembly to be resolved and loaded based on its AssemblyName.

LoadFromAssemblyName(AssemblyName)

해당 AssemblyName이 지정된 어셈블리를 확인하고 로드합니다.Resolves and loads an assembly given its AssemblyName.

LoadFromAssemblyPath(String)

지정한 경로에 있는 어셈블리 파일의 내용을 로드합니다.Loads the contents of an assembly file on the specified path.

LoadFromNativeImagePath(String, String)

지정된 경로에서 관리 어셈블리 파일의 네이티브 이미지 콘텐츠를 로드합니다.Loads the contents of the native image of a managed assembly file on the specified path.

LoadFromStream(Stream)

관리 어셈블리가 포함된 COFF(공용 개체 파일 형식) 기반 이미지를 사용하여 어셈블리를 로드합니다.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly.

LoadFromStream(Stream, Stream)

관리 어셈블리가 포함되고 경우에 따라 어셈블리에 대한 기호가 포함되는 COFF(공용 개체 파일 형식) 기반 이미지를 사용하여 어셈블리를 로드합니다.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly, optionally including symbols for the assembly.

LoadUnmanagedDll(String)

파생된 클래스가 이름별로 관리되지 않는 라이브러리를 로드할 수 있습니다.Allows derived class to load an unmanaged library by name.

LoadUnmanagedDllFromPath(String)

지정된 경로에서 관리되지 않는 라이브러리를 로드합니다.Loads an unmanaged library from the specified path.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

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

이 로드 컨텍스트의 최적화 프로필이 저장되는 루트 경로를 설정합니다.Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String)

지정된 프로필의 프로필 최적화를 시작합니다.Starts the profile optimization for the specified profile.

ToString()

이 로드 컨텍스트의 문자열 표현을 반환합니다.Returns the string representation of this load context.

Unload()

AssemblyLoadContext의 언로드를 시작합니다.Initiates an unload of this AssemblyLoadContext.

이벤트

Resolving

이 어셈블리 로드 컨텍스트에 로드하려고 할 때 어셈블리를 확인하는 데 실패하는 경우 발생합니다.Occurs when the resolution of an assembly fails when attempting to load into this assembly load context.

ResolvingUnmanagedDll

네이티브 라이브러리를 확인하지 못할 경우에 발생합니다.Occurs when the resolution of a native library fails.

Unloading

AssemblyLoadContext를 언로드하는 경우 발생합니다.Occurs when the AssemblyLoadContext is unloaded.

적용 대상

추가 정보