Разница между AppDomain.GetAssemblies и BuildManager.GetReferencedAssemblies
Просто хотел узнать, есть ли какая-то разница между ними в контексте полностью доверенного приложения asp.net mvc 2.
1 ответ
.NET Framework откладывает загрузку сборок в текущий домен приложений до тех пор, пока они не понадобятся. Например, если вы вызываете стороннюю библиотеку только из SomeMethod(), сторонняя DLL обычно не загружается до первого запуска SomeMethod().
AppDomain.GetAssemblies () предоставляет вам все сборки, которые уже были загружены в текущий AppDomain. BuildManager.GetReferencedAssemblies() возвращает список всех сборок, на которые есть ссылки в Web.config и других местах, и загружает эти сборки в текущий домен приложения.
Вот отработанный пример вышесказанного.
- SomeMethod () еще не запущен.
- Вызовите AppDomain.GetAssemblies(), возвращает набор, который не включает ThirdParty.dll.
- Вызовите SomeMethod().
- Вызов AppDomain.GetAssemblies(), возвращает набор, который включает в себя ThirdParty.dll.
В этом примере CLR откладывает загрузку ThirdParty.dll в текущий домен приложений, пока это не станет абсолютно необходимым. И поскольку это необходимо для выполнения SomeMethod(), именно тогда он загружается.
В качестве альтернативы:
- SomeMethod () еще не запущен.
- Вызовите AppDomain.GetAssemblies(), возвращает набор, который не включает ThirdParty.dll.
- Вызов BuildManager.GetReferencedAssemblies(), возвращает набор, который включает в себя ThirdParty.dll.
- Вызов AppDomain.GetAssemblies(), возвращает набор, который включает в себя ThirdParty.dll.
Здесь, даже если вы никогда не вызывали SomeMethod(), вызов BuildManager.GetReferencedAssemblies () загрузил стороннюю библиотеку в текущий домен приложений от вашего имени.
Конечно, все это подлежит определенной оптимизации и т. Д., Но общая идея верна.