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. y #
- 3. Diferencia entre & y &
- 4. ¿Diferencia entre == y caso?
- 5. Diferencia entre objeto y *?
- 6. La diferencia entre $ * y $ @
- 7. VBA: Diferencia entre y y +
- 8. Diferencia entre -Wconversion entre gcc y g ++
- 9. Diferencia entre "__method__" y "método"
- 10. Diferencia entre System.Web.Cache y HTTPContext.Curent.Cache
- 11. Diferencia entre JPA y JDO?
- 12. Diferencia entre XML y SOAP
- 13. Diferencia entre tortoisesvn y CollabNetSubversion
- 14. Diferencia entre interrupción y eventos
- 15. diferencia entre SDL y GLUT
- 16. C# diferencia entre == y equals()
- 17. Diferencia entre java.exe y javaw.exe
- 18. Diferencia entre borrar y eliminar
- 19. Diferencia entre objeto y NSObject
- 20. Diferencia entre iostream y iostream.h
- 21. Diferencia entre monitor y bloqueo?
- 22. ¿Diferencia entre asociación y dependencia?
- 23. Diferencia entre Math.Floor() y Math.Truncate()
- 24. Diferencia entre document.getSelection() y window.getSelection()
- 25. Diferencia entre Monitor.Pulse y Monitor.PulseAll
- 26. Diferencia entre wscript y cscript
- 27. Diferencia entre qt y PyQt4
- 28. Diferencia entre getAttribute() y getParameter()
- 29. Diferencia entre AlarmManager y ScheduledExecutorService
- 30. Diferencia entre PyMODINIT_FUNC y PyModule_Create
@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) –