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