AssemblyLoadContext Clase

Definición

Representa el concepto del tiempo de ejecución de un ámbito de carga de ensamblado.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
Herencia
AssemblyLoadContext

Comentarios

La AssemblyLoadContext representa un contexto de carga.The AssemblyLoadContext represents a load context. Conceptualmente, un contexto de carga crea un ámbito para cargar, resolver y posiblemente descargar 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 método AssemblyLoadContext.Load(AssemblyName) debe implementarse para crear una clase concreta.The AssemblyLoadContext.Load(AssemblyName) method needs to be implemented to create a concrete class.

El AssemblyLoadContext existe principalmente para proporcionar aislamiento de carga de ensamblados.The AssemblyLoadContext exists primarily to provide assembly loading isolation. Permite cargar varias versiones del mismo ensamblado 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 varias instancias de AppDomain en el .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 completos para el proceso.All code has full permissions of the process.

Uso en tiempo de ejecuciónUsage in the runtime

El Runtime 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 avanzados.An application can create its own AssemblyLoadContext to create a custom solution for advanced scenarios. La personalización se centra en la definición de mecanismos de resolución de dependencias.The customization focuses on defining dependency resolution mechanisms.

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

  1. El método AssemblyLoadContext.Load(AssemblyName) proporciona la primera oportunidad para que el AssemblyLoadContext resuelva, cargue y devuelva el ensamblado.The AssemblyLoadContext.Load(AssemblyName) method provides the first chance for the AssemblyLoadContext to resolve, load, and return the assembly. Si el método AssemblyLoadContext.Load(AssemblyName) devuelve null, el cargador intenta cargar el ensamblado en el AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) method returns null, the loader tries to load the assembly into the AssemblyLoadContext.Default.
  2. Si el AssemblyLoadContext.Default no puede resolver el ensamblado, el AssemblyLoadContext original 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 evento Resolving.The runtime raises the Resolving event.

Además, el método virtual AssemblyLoadContext.LoadUnmanagedDll(String) permite la personalización de la resolución de ensamblados no administrados predeterminada.Additionally, the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. La implementación predeterminada devuelve null, que hace que la búsqueda en tiempo de ejecución use su Directiva de búsqueda predeterminada.The default implementation returns null, which causes the runtime search to use its default search policy. La Directiva de búsqueda predeterminada es suficiente para la mayoría de los escenarios.The default search policy 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

    La carga de varias copias o de diferentes versiones de los ensamblados de .NET Framework puede provocar un comportamiento inesperado y difícil de diagnosticar.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard-to-diagnose behavior.

    Sugerencia

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

  • El tiempo de carga de ensamblados puede dificultar las pruebas y la depuración.The timing of assembly loading can make testing and debugging difficult. Normalmente, los ensamblados se cargan sin que sus dependencias se resuelvan inmediatamente.Assemblies are typically loaded without their dependencies immediately being resolved. Las dependencias se cargan a medida que se necesitan:The dependencies are loaded as they are needed:

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

  • El mismo ensamblado se carga varias veces en contextos diferentes.The same assembly is loaded multiple times into different contexts.

    • Esto puede dar lugar a mensajes de error confusos, por ejemplo "no se puede convertir el objeto de tipo ' sample. plugin" al tipo ' sample. plugin "'.This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'".
    • El cálculo de referencias en los límites de aislamiento no es trivial.Marshaling across isolation boundaries is non-trivial. Una solución típica es usar una interfaz definida en un ensamblado que solo se carga en el contexto de carga predeterminado.A typical solution is to use an interface defined in an assembly that's only loaded into the default load context.

Constructores

AssemblyLoadContext()

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

AssemblyLoadContext(Boolean)

Inicializa una nueva instancia de la clase AssemblyLoadContext con un valor que indica si la descarga está habilitada.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

AssemblyLoadContext(String, Boolean)

Inicializa una nueva instancia de la clase AssemblyLoadContext con un nombre y un valor que indica si la descarga está habilitada.Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

Propiedades

All

Devuelve una colección de todas las instancias AssemblyLoadContext.Returns a collection of all AssemblyLoadContext instances.

Assemblies

Devuelve una colección de las instancias Assembly cargadas en AssemblyLoadContext.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext

Obtiene el elemento AssemblyLoadContext establecido por la llamada más reciente a EnterContextualReflection().Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

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

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

Name

Obtiene el nombre de AssemblyLoadContext.Get the name of the AssemblyLoadContext.

Métodos

EnterContextualReflection()

Establece CurrentContextualReflectionContext en thisAssemblyLoadContext.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Establece CurrentContextualReflectionContext en el elemento AssemblyLoadContext que ha cargado el ensamblado.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object)

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

(Heredado de Object)
Finalize()

Permite que el objeto intente liberar recursos y realizar otras operaciones de limpieza antes que lo reclame la recolección de elementos no utilizados.Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

GetAssemblyName(String)

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

GetHashCode()

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

(Heredado de Object)
GetLoadContext(Assembly)

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

GetType()

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

(Heredado de Object)
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)

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

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)

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)

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)

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)

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

LoadUnmanagedDllFromPath(String)

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

MemberwiseClone()

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

(Heredado de Object)
SetProfileOptimizationRoot(String)

Establece la ruta de acceso raíz en la que se almacenan los perfiles de optimización para este contexto de carga.Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String)

Inicia la optimización por perfiles para el perfil especificado.Starts the profile optimization for the specified profile.

ToString()

Devuelve la representación de cadena de este contexto de carga.Returns the string representation of this load context.

Unload()

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

Eventos

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

Se produce cuando la resolución de una biblioteca nativa produce errores.Occurs when the resolution of a native library fails.

Unloading

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

Se aplica a

Consulte también: