AssemblyLoadContext Clase

Definición

Representa el concepto del entorno de ejecución de un ámbito para la carga de ensamblados.

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
Herencia
AssemblyLoadContext

Comentarios

AssemblyLoadContext representa un contexto de carga. Conceptualmente, un contexto de carga crea un ámbito para cargar, resolver y, potencialmente, descargar un conjunto de ensamblajes.

AssemblyLoadContext existe principalmente para proporcionar aislamiento de carga de ensamblado. Permite cargar varias versiones del mismo ensamblado dentro de un único proceso. Reemplaza los mecanismos de aislamiento proporcionados por varias AppDomain instancias de .NET Framework.

Note

Uso en tiempo de ejecución

El tiempo de ejecución implementa dos contextos de carga de ensamblado:

  • AssemblyLoadContext.Default representa el contexto predeterminado del entorno de ejecución, que se usa para el ensamblado principal de la aplicación y sus dependencias estáticas.
  • El Assembly.LoadFile(String) método aísla los ensamblados que carga mediante la creación de instancias del método más básico AssemblyLoadContext. Tiene un esquema de aislamiento simplista que carga cada ensamblado en su propio AssemblyLoadContext, sin resolver dependencias.

Uso de la aplicación

Una aplicación puede crear su propia AssemblyLoadContext para crear una solución personalizada para escenarios avanzados. La personalización se centra en definir mecanismos de resolución de dependencias.

AssemblyLoadContext proporciona dos puntos de extensión para implementar la resolución de ensamblados administrados:

  1. El método AssemblyLoadContext.Load(AssemblyName) ofrece la primera oportunidad para que AssemblyLoadContext resuelva, cargue y devuelva el ensamblaje. Si el AssemblyLoadContext.Load(AssemblyName) método devuelve null, el cargador intenta cargar el ensamblado en .AssemblyLoadContext.Default
  2. Si AssemblyLoadContext.Default no puede resolver el ensamblaje, el original AssemblyLoadContext obtiene una segunda oportunidad para resolver el ensamblaje. El tiempo de ejecución genera el evento Resolving.

Además, el AssemblyLoadContext.LoadUnmanagedDll(String) método virtual permite personalizar la resolución de ensamblado no administrada predeterminada. La implementación predeterminada devuelve null, lo que hace que la búsqueda en tiempo de ejecución use su directiva de búsqueda predeterminada. La directiva de búsqueda predeterminada es suficiente para la mayoría de los escenarios.

Desafíos técnicos

  • No es posible cargar varias versiones del entorno de ejecución en un único proceso.

    Caution

    La carga de varias copias o versiones diferentes de ensamblados de marco puede provocar un comportamiento inesperado y difícil de diagnosticar.

    Sugerencia

    Use límites de proceso con comunicación remota o entre procesos para resolver este problema de aislamiento.

  • El tiempo de carga del ensamblado puede dificultar las pruebas y la depuración. Normalmente, los ensamblados se cargan sin que se resuelvan inmediatamente sus dependencias. Las dependencias se cargan según sean necesarias:

    • Cuando el código se bifurca en un ensamblado dependiente.
    • Cuando el código carga recursos.
    • Cuando un código carga explícitamente ensamblajes.
  • La implementación de AssemblyLoadContext.Load(AssemblyName) puede agregar nuevas dependencias que pueden necesitar estar aisladas para permitir que existan versiones diferentes. La implementación más natural colocaría estas dependencias en el contexto predeterminado. El diseño cuidadoso puede aislar las nuevas dependencias.

  • El mismo ensamblado se carga varias veces en contextos diferentes.

    • Esto puede provocar mensajes de error confusos, por ejemplo, "No se puede convertir el objeto de tipo "Sample.Plugin" al tipo "Sample.Plugin".
    • La serialización entre límites de aislamiento no es trivial. Una solución típica consiste en usar una interfaz definida en un ensamblado que solo se carga en el contexto de carga predeterminado.

Constructores

Nombre Description
AssemblyLoadContext()

Inicializa una nueva instancia de la clase AssemblyLoadContext.

AssemblyLoadContext(Boolean)

Inicializa una nueva instancia de la AssemblyLoadContext clase con un valor que indica si la descarga está habilitada.

AssemblyLoadContext(String, Boolean)

Inicializa una nueva instancia de la AssemblyLoadContext clase con un nombre y un valor que indica si la descarga está habilitada.

Propiedades

Nombre Description
All

Devuelve una colección de todas las AssemblyLoadContext instancias.

Assemblies

Devuelve una colección de las Assembly instancias cargadas en .AssemblyLoadContext

CurrentContextualReflectionContext

Obtiene el AssemblyLoadContext valor establecido por la llamada más reciente a EnterContextualReflection().

Default

Obtiene el valor predeterminado AssemblyLoadContext. El contexto predeterminado contiene el ensamblado de aplicación principal y sus dependencias estáticas.

IsCollectible

Obtiene un valor que indica si se AssemblyLoadContext puede recopilar.

Name

Obtenga el nombre de .AssemblyLoadContext

Métodos

Nombre Description
EnterContextualReflection()

Establece CurrentContextualReflectionContext en thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Establece CurrentContextualReflectionContext en el AssemblyLoadContext objeto que cargó el ensamblado.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
Finalize()

Permite al objeto intentar liberar recursos y realizar otras operaciones de limpieza antes de que la recolección de elementos no utilizados lo recupere.

GetAssemblyName(String)

Obtiene un AssemblyName para una ruta de acceso de ensamblado.

GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetLoadContext(Assembly)

Obtiene el AssemblyLoadContext objeto que contiene el objeto especificado Assembly.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
Load(AssemblyName)

Cuando se reemplaza en una clase derivada, permite que un ensamblado se resuelva en función de su AssemblyName.

LoadFromAssemblyName(AssemblyName)

Resuelve y carga un ensamblado dado su AssemblyName.

LoadFromAssemblyPath(String)

Carga el contenido de un archivo de ensamblado en la ruta de acceso especificada.

LoadFromNativeImagePath(String, String)

Carga el contenido de la imagen nativa de un archivo de ensamblado administrado en la ruta de acceso especificada.

LoadFromStream(Stream, Stream)

Carga el ensamblado con una imagen basada en formato de archivo de objeto común (COFF) que contiene un ensamblado administrado, que opcionalmente incluye símbolos para el ensamblado.

LoadFromStream(Stream)

Carga el ensamblado con una imagen basada en formato de archivo de objeto común (COFF) que contiene un ensamblado administrado.

LoadUnmanagedDll(String)

Permite que la clase derivada cargue una biblioteca no administrada por nombre.

LoadUnmanagedDllFromPath(String)

Carga una biblioteca no administrada desde la ruta de acceso especificada.

MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
SetProfileOptimizationRoot(String)

Establece la ruta de acceso raíz donde se almacenan los perfiles de optimización para este contexto de carga.

StartProfileOptimization(String)

Inicia la optimización del perfil para el perfil especificado.

ToString()

Devuelve la representación de cadena de este contexto de carga.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
Unload()

Inicia una descarga de este AssemblyLoadContext.

Eventos

Nombre Description
Resolving

Se produce cuando se produce un error en la resolución de un ensamblado al intentar cargar en este contexto de carga de ensamblado.

ResolvingUnmanagedDll

Se produce cuando se produce un error en la resolución de una biblioteca nativa.

Unloading

Se produce cuando AssemblyLoadContext se descarga .

Se aplica a

Consulte también