AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext Class

Definición

Representa el concepto del tiempo de ejecución de un ámbito de enlace.Represents the runtime's concept of a scope for binding. Esta clase es abstracta.This class is abstract.

public ref class AssemblyLoadContext abstract
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public MustInherit Class AssemblyLoadContext
Herencia
AssemblyLoadContextAssemblyLoadContextAssemblyLoadContextAssemblyLoadContext

Comentarios

El AssemblyLoadContext representa un contexto de carga.The AssemblyLoadContext represents a load context. Conceptualmente, un contexto de carga crea un ámbito para cargar, resolución y potencialmente descarga un conjunto de ensamblados.Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext es una clase abstracta.AssemblyLoadContext is an abstract class. El AssemblyLoadContext.Load(AssemblyName) debe implementarse para crear una clase concreta.The AssemblyLoadContext.Load(AssemblyName) needs to be implemented to create a concrete class.

El AssemblyLoadContext existe principalmente para proporcionar aislamiento de enlaces de ensamblados.The AssemblyLoadContext exists primarily to provide assembly binding isolation. Permite que varias versiones del mismo ensamblado que se carguen en un único proceso.It allows multiple versions of the same assembly to be loaded within a single process. Reemplaza los mecanismos de aislamiento proporcionados por varios AppDomain instancias en .NET Framework.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Nota

AssemblyLoadContext no proporciona ninguna característica de seguridad.AssemblyLoadContext does not provide any security features. Todo el código tiene permisos totales del proceso.All code has full permissions of the process.

Uso en el tiempo de ejecuciónUsage in the runtime

El tiempo de ejecución implementa dos contextos de carga de ensamblado:The runtime implements two assembly load contexts:

Uso de la aplicaciónApplication usage

Una aplicación puede crear su propio AssemblyLoadContext para crear una solución personalizada para escenarios de enlace avanzada.An application can create its own AssemblyLoadContext to create a custom solution for advanced binding scenarios. La personalización se centra en la definición de los mecanismos de resolución de dependencia.The customization focuses on defining dependency resolution mechanisms.

El AssemblyLoadContext proporciona dos puntos de extensión para implementar la resolución de ensamblado administrado:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. El AssemblyLoadContext.Load(AssemblyName) proporciona la primera instancia posible para el AssemblyLoadContext para resolver el ensamblado, cargarlo y devolverlo.The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. Si el AssemblyLoadContext.Load(AssemblyName) devuelve null, el cargador intentará cargar el ensamblado en el AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Si el AssemblyLoadContext.Default no puede resolver el ensamblado, el original AssemblyLoadContext Obtiene una segunda oportunidad para resolver el ensamblado.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. El tiempo de ejecución genera el Resolving eventos.The runtime raises the Resolving event.

Además el AssemblyLoadContext.LoadUnmanagedDll(String) método virtual permite la personalización de la resolución de ensamblado no administrado predeterminado.Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. La implementación predeterminada devuelve null, lo que hace que la búsqueda en tiempo de ejecución usar su directiva de búsqueda predeterminado que es suficiente para la mayoría de los escenarios.The default implementation returns null, which causes the runtime search to use its default search policy which is sufficient for most scenarios.

Desafíos técnicosTechnical challenges

  • No es posible cargar varias versiones del tiempo de ejecución en un único proceso.It is not possible to load multiple versions of the runtime in a single process.

    Precaución

    Cargando varias copias o versiones diferentes de los ensamblados de framework puede provocar inesperado y difíciles de diagnosticar el comportamiento.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard to diagnose behavior.

    Sugerencia

    Use los límites del proceso con comunicación remota o la comunicación entre procesos para solucionar este problema de aislamiento.Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • El tiempo de carga de ensamblados puede dificultar las pruebas y depuración.The timing of assembly loading can make testing and debugging difficult. Los ensamblados se cargan normalmente sin sus dependencias se resuelven inmediatamente.Assemblies are typically loaded without their dependencies immediately being resolved. Las dependencias se cargan según sean necesarios:The dependencies are loaded as they are needed:

    • Cuando el código se bifurca en un ensamblado dependiente.When code branches into a dependent assembly.
    • Cuando el código carga los recursos.When code loads resources.
    • Cuando el código carga explícitamente los ensamblados.When code explicitly loads assemblies.
  • La implementación de AssemblyLoadContext.Load(AssemblyName) puede agregar nuevas dependencias que deben aislarse permiten que distintas versiones de existir.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. La implementación más natural se colocará estas dependencias en el contexto predeterminado.The most natural implementation would place these dependencies in the default context. Un cuidadoso diseño puede aislar las dependencias nuevo.Careful design can isolate the new dependencies.

  • El proceso de aislamiento de enlace crea varios tipos con el mismo nombre de tipo.The binding isolation process creates multiple types with the same type name.

    • Esto puede llevar a confusión de los mensajes de error, por ejemplo "tipo Foo.Foo no se puede convertir al tipo Foo.Foo."This can lead to confusing error messages, for example "type Foo.Foo cannot be cast to type Foo.Foo."
    • El cálculo de referencias entre los límites de aislamiento no es trivial.Marshaling across isolation boundaries is non-trivial. Una solución típica sería usar una interfaz definida en un ensamblado que solo se carga en el contexto de carga predeterminado.A typical solution would be to use an interface defined in an assembly which is only loaded into the default load context.

Constructores

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

Inicializa una nueva instancia de la clase AssemblyLoadContext.Initializes a new instance of the AssemblyLoadContext class.

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

Inicializa una nueva instancia de la clase AssemblyLoadContext con un valor que indica si una recolección de elementos no utilizados está habilitada.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether garbage collection is enabled.

AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean)

Propiedades

All All All All
Assemblies Assemblies Assemblies Assemblies
CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext
Default Default Default Default

Obtiene el AssemblyLoadContext predeterminado.Gets the default AssemblyLoadContext. El contexto predeterminado contiene el ensamblado de aplicación principal y sus dependencias estáticas.The default context contains the main application assembly and its static dependencies.

IsCollectible IsCollectible IsCollectible IsCollectible

Obtiene un valor que indica si esta estructura AssemblyLoadContext es recopilable.Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name Name Name Name

Métodos

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()
EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String)

Obtiene un elemento AssemblyName de una ruta de acceso de ensamblado.Gets an AssemblyName for an assembly path.

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

Sirve como la función hash predeterminada.Serves as the default hash function.

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

Obtiene el elemento AssemblyLoadContext que contiene el elemento Assembly especificado.Gets the AssemblyLoadContext containing the specified Assembly.

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

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

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

Cuando se invalida en una clase derivada, permite que un ensamblado se resuelva y se cargue en función de su 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)

Resuelve y carga un ensamblado dado su AssemblyName.Resolves and loads an assembly given its AssemblyName.

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

Carga el contenido de un archivo de ensamblado en la ruta de acceso especificada.Loads the contents of an assembly file on the specified path.

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

Carga el contenido de la imagen nativa de un archivo de ensamblado administrado en la ruta de acceso especificada.Loads the contents of the native image of a managed assembly file on the specified path.

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

Carga el ensamblado con una imagen basada en el formato de archivo de objeto común (COFF) que contiene un ensamblado administrado.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)

Carga el ensamblado con una imagen basada en el formato de archivo de objeto común (COFF) que contiene un ensamblado administrado, incluyendo opcionalmente los símbolos del ensamblado.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)

Permite que una clase derivada cargue una biblioteca no administrada por nombre.Allows derived class to load an unmanaged library by name.

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

Carga una biblioteca no administrada desde la ruta de acceso especificada.Loads an unmanaged library from the specified path.

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

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String)
StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)
ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)
Unload() Unload() Unload() Unload()

Inicia una descarga de este AssemblyLoadContext.Initiates an unload of this AssemblyLoadContext.

Eventos

Resolving Resolving Resolving Resolving

Se produce cuando ocurre un error en la resolución de un ensamblado al intentar cargar en el contexto de carga de este ensamblado.Occurs when the resolution of an assembly fails when attempting to load into this assembly load context.

ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll
Unloading Unloading Unloading Unloading

Se produce cuando AssemblyLoadContext está sin cargar.Occurs when the AssemblyLoadContext is unloaded.

Se aplica a

Consulte también: