Diferencia entre AppDomain.GetAssemblies y BuildManager.Obtener conjuntos de referencia


Solo quería saber si hay alguna diferencia entre los dos, en el contexto de una confianza total asp.net aplicación mvc 2.

Author: starblue, 2010-03-19

1 answers

. NET Framework aplaza la carga de ensamblados en el AppDomain actual hasta que sean necesarios. Por ejemplo, si llamas a una biblioteca de terceros solo desde someMethod(), la DLL de terceros normalmente no se cargará hasta la primera vez que se ejecute someMethod ().

AppDomain.GetAssemblies () te da todos los ensamblados que ya han sido cargados en el AppDomain actual. BuildManager.GetReferencedAssemblies () devuelve una lista de todos los ensamblados referenciados desde Web.config y otros, y carga esos ensamblajes en el AppDomain actual.

Aquí hay un ejemplo elaborado de lo anterior.

  1. someMethod() aún no se ha ejecutado.
  2. Llama a AppDomain.GetAssemblies (), devuelve un conjunto que no incluye ThirdParty.DLL.
  3. Llama a someMethod().
  4. Llama a AppDomain.GetAssemblies (), devuelve un conjunto que incluye ThirdParty.DLL.

En este ejemplo, el CLR aplaza la carga de la tercera parte.dll en el AppDomain actual hasta que sea absolutamente necesario. Y como es necesario para la ejecución de someMethod (), es entonces cuando se carga.

Alternativamente:

  1. someMethod() aún no se ha ejecutado.
  2. Llama a AppDomain.GetAssemblies (), devuelve un conjunto que no incluye ThirdParty.DLL.
  3. Llama a BuildManager.GetReferencedAssemblies (), devuelve un conjunto que incluye ThirdParty.DLL.
  4. Llama a AppDomain.GetAssemblies (), devuelve un conjunto que incluye ThirdParty.DLL.

Aquí, aunque nunca llama someMethod (), la llamada a BuildManager.GetReferencedAssemblies () cargó la biblioteca de terceros en el AppDomain actual en su nombre.

Por supuesto, todo esto está sujeto a ciertas optimizaciones, etc., pero la idea general se mantiene.

 54
Author: Levi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-19 17:43:06