Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los ensamblados administrados se ubican y se cargan con un algoritmo que tiene varias fases.
Todos los ensamblados administrados excepto los ensamblados satélite y los ensamblados WinRT usan el mismo algoritmo.
¿Cuándo se cargan los ensamblados administrados?
El mecanismo más común para desencadenar una carga de ensamblado administrado es una referencia de ensamblado estático. El compilador inserta estas referencias cada vez que el código usa un tipo definido en otro ensamblado. Estos conjuntos se cargan (load-by-name) según sea necesario por el entorno de ejecución. No se especifica el tiempo exacto de cuándo se cargan las referencias de ensamblado estático. Puede variar entre las distintas versiones del runtime se ve influenciada por optimizaciones como la inserción.
El uso directo de las siguientes API también desencadenará cargas:
| Interfaz de Programación de Aplicaciones (API) | Descripción |
Active
AssemblyLoadContext
|
|---|---|---|
| AssemblyLoadContext.LoadFromAssemblyName | Load-by-name |
La instancia de this. |
| AssemblyLoadContext.LoadFromAssemblyPath AssemblyLoadContext.LoadFromNativeImagePath |
Cargue desde la ruta de acceso. | La instancia de this. |
| AssemblyLoadContext.LoadFromStream | Cargue desde el objeto. | La instancia de this. |
| Assembly.LoadFile | Cargue desde la ruta de acceso en una nueva instancia de AssemblyLoadContext. | La nueva AssemblyLoadContext instancia. |
| Assembly.LoadFrom | Cargue desde la ruta de acceso en la instancia de AssemblyLoadContext.Default. Agrega un AppDomain.AssemblyResolve controlador. El controlador cargará las dependencias del ensamblado desde su directorio. |
Instancia de AssemblyLoadContext.Default. |
| Assembly.Load(AssemblyName) Assembly.Load(String) Assembly.LoadWithPartialName |
Load-by-name. |
Se infiere del autor de la llamada. Prefiere los métodos AssemblyLoadContext. |
| Assembly.Load(Byte[]) Assembly.Load(Byte[], Byte[]) |
Cargue desde el objeto en una nueva instancia de AssemblyLoadContext. | La nueva AssemblyLoadContext instancia. |
| Type.GetType(String) Type.GetType(String, Boolean) Type.GetType(String, Boolean, Boolean) |
Load-by-name. |
Se infiere del autor de la llamada. Prefiera los métodos Type.GetType con un argumento assemblyResolver. |
| Assembly.GetType | Si el tipo name describe un tipo genérico calificado con el ensamblado, desencadene un elemento Load-by-name. |
Se infiere del autor de la llamada. Prefiere Type.GetType al utilizar nombres de tipo calificados con el ensamblado. |
| Activator.CreateInstance(String, String) Activator.CreateInstance(String, String, Object[]) Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
Load-by-name. |
Se infiere del autor de la llamada. Prefiere los métodos Activator.CreateInstance que toman un argumento Type. |
Algoritmo
En el algoritmo siguiente se describe cómo carga el tiempo de ejecución un ensamblado administrado.
Determine el elemento
activede AssemblyLoadContext.- Para una referencia de ensamblado estático,
activeAssemblyLoadContext es la instancia que cargó el ensamblado de referencia. - Las API preferidas hacen que
activeAssemblyLoadContext sea explícito. - Otras API deducen el
activeAssemblyLoadContext. Para estas API, se usa la AssemblyLoadContext.CurrentContextualReflectionContext propiedad . Si su valor esnull, se usa la instancia deducida AssemblyLoadContext . - Consulte la tabla en la sección ¿Cuándo se cargan los ensamblados administrados?
- Para una referencia de ensamblado estático,
Para los
Load-by-namemétodos,activeAssemblyLoadContext carga el ensamblado en el orden de prioridad siguiente:- Compruebe su elemento
cache-by-name. - Llame a la función AssemblyLoadContext.Load.
- Compruebe la caché de la instancia y ejecute la AssemblyLoadContext.Default lógica de sondeo predeterminada del ensamblado administrado . Si se ha cargado un ensamblado recientemente, se agrega una referencia al elemento AssemblyLoadContext.Default de la instancia de
cache-by-name. - Genere el evento AssemblyLoadContext.Resolving para el elemento AssemblyLoadContext activo.
- Produce el evento AppDomain.AssemblyResolve.
- Compruebe su elemento
Para los otros tipos de cargas, carga
activeAssemblyLoadContext el ensamblado en el orden de prioridad siguiente:- Compruebe su elemento
cache-by-name. - Cargue desde la ruta de acceso especificada o el objeto de ensamblado sin formato. Si se ha cargado un ensamblado recientemente, se agrega una referencia al elemento
activede la instancia de AssemblyLoadContextcache-by-name.
- Compruebe su elemento
En cualquier caso, si se carga un ensamblado nuevo, entonces se genera el evento AppDomain.AssemblyLoad.