AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext Class

정의

바인딩에 대한 범위의 런타임 개념을 나타냅니다.Represents the runtime's concept of a scope for binding. 이 클래스는 추상 클래스입니다.This class is abstract.

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

설명

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) needs to be implemented to create a concrete class.

AssemblyLoadContext 주로 어셈블리 바인딩 격리를 제공 하기 위해 존재 합니다.The AssemblyLoadContext exists primarily to provide assembly binding 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 binding scenarios. 사용자 지정은 종속성 확인 메커니즘을 정의 하는 데 중점을 둔 것입니다.The customization focuses on defining dependency resolution mechanisms.

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

  1. 는 에서AssemblyLoadContext 어셈블리를 확인 하 고 로드 하 여 반환할 수 있는 첫 번째 기회를 제공합니다.AssemblyLoadContext.Load(AssemblyName)The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. 가를 null AssemblyLoadContext.Default반환 하면 로더에서 어셈블리를에 로드 하려고 시도 합니다. AssemblyLoadContext.Load(AssemblyName)If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try 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 which 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 and/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 which 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 binding isolation process creates multiple types with the same type name.

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

생성자

AssemblyLoadContext() AssemblyLoadContext() AssemblyLoadContext() AssemblyLoadContext()

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

AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean)

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

AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) 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 All All All

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

Assemblies Assemblies Assemblies Assemblies

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

CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext

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

Default Default Default Default

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

IsCollectible IsCollectible IsCollectible IsCollectible

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

Name Name Name Name

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

메서드

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()

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

EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)

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

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

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

GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String)

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly)

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

GetType() GetType() GetType() GetType()

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

(Inherited from Object)
Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

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

LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName)

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

LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String)

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

LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String)

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

LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream)

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

LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream) 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) LoadUnmanagedDll(String) LoadUnmanagedDll(String) LoadUnmanagedDll(String)

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

LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String)

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

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String)

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

StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)

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

ToString() ToString() ToString() ToString()

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

Unload() Unload() Unload() Unload()

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

이벤트

Resolving Resolving Resolving Resolving

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

ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll

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

Unloading Unloading Unloading Unloading

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

적용 대상

추가 정보