Solo quería saber si hay alguna diferencia entre los dos, en el contexto de una aplicación asp.net mvc 2 totalmente confiable.Diferencia entre AppDomain.GetAssemblies y BuildManager.GetReferencedAssemblies
Respuesta
.NET Framework aplaza la carga de ensamblajes en el AppDomain actual hasta que se necesiten. Por ejemplo, si llama 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() le proporciona todos los ensamblajes que ya se han cargado en el dominio de aplicación actual. BuildManager.GetReferencedAssemblies() devuelve una lista de todos los ensamblados a los que se hace referencia desde Web.config y en otros lugares, y carga esos ensamblajes en el AppDomain actual.
Aquí hay un ejemplo resuelto de lo anterior.
- SomeMethod() aún no se ha ejecutado.
- Llamar a AppDomain.GetAssemblies(), devuelve un conjunto que no incluye ThirdParty.dll.
- Llamar SomeMethod().
- Llamar a AppDomain.GetAssemblies(), devuelve un conjunto que incluye ThirdParty.dll.
En este ejemplo, CLR aplaza cargar ThirdParty.dll en el AppDomain actual hasta que sea absolutamente necesario. Y dado que es necesario para la ejecución de SomeMethod(), es cuando se carga.
Alternativamente:
- SomeMethod() todavía no se ha ejecutado.
- Llamar a AppDomain.GetAssemblies(), devuelve un conjunto que no incluye ThirdParty.dll.
- Llamar a BuildManager.GetReferencedAssemblies(), devuelve un conjunto que incluye ThirdParty.dll.
- Llamar a AppDomain.GetAssemblies(), devuelve un conjunto que incluye ThirdParty.dll.
Aquí, aunque nunca llamó a SomeMethod(), la llamada a BuildManager.GetReferencedAssemblies() cargó la biblioteca de terceros en el dominio de aplicación actual en su nombre.
Por supuesto, esto está sujeto a ciertas optimizaciones, etc., pero la idea general es válida.
¿Entonces la única manera de obtener un control de BuildManager es haciendo referencia a System.Web.dll? Suena un poco raro – Ted
@Ted ¿Qué pasa con esto? Simplifiqué bastante en mi respuesta anterior, pero el concepto de BuildManager solo tiene sentido en una aplicación ASP.NET. – Levi
sí, hacer referencia a System.Web.dll y usar BuildManager arrojará una excepción si no es un proyecto de ASP.NET. En WinForms no puedes hacer esto. – Ted
- 1. MySQL: diferencia entre ', `,' y"
- 2. Diferencia entre objeto y *?
- 3. Diferencia entre. y #
- 4. ¿Diferencia entre == y caso?
- 5. La diferencia entre $ * y $ @
- 6. Diferencia entre & y &
- 7. VBA: Diferencia entre y y +
- 8. Diferencia entre -Wconversion entre gcc y g ++
- 9. Diferencia entre subprocess.Popen y os.system
- 10. Diferencia entre decimal y decimal
- 11. ¿Diferencia entre trazo y relleno?
- 12. Diferencia entre interrupción y eventos
- 13. Diferencia entre netTcpContextBinding y netTcpBinding
- 14. ¿Diferencia entre brújula y sass?
- 15. Diferencia entre "__method__" y "método"
- 16. Diferencia entre Mealy y Moore
- 17. Diferencia entre HashSet y HashMap?
- 18. diferencia entre ajax y enviar
- 19. Diferencia entre sistema y shell_exec
- 20. Diferencia entre Style y ControlTemplate
- 21. Diferencia entre relativo y absoluto
- 22. Diferencia entre window.location.href y top.location.href
- 23. Diferencia entre strncpy y memcpy?
- 24. diferencia entre SDL y GLUT
- 25. Diferencia entre Javascript y PHP
- 26. Diferencia entre Session y HttpContext.Current.Session
- 27. diferencia entre px y em
- 28. Diferencia entre sqrtf y sqrtf
- 29. ¿Diferencia entre Keychain y NSUserDefault?
- 30. Diferencia entre ViewData y TempData?
@starblue: ¿se explica la votación? – Herman
Gracias por preguntar esto. No sabía que existiera BuildManager, que me salvó totalmente. (Debido al comportamiento que describió Levi) –