.NET Framework откладывает загрузку сборок в текущий домен приложений до тех пор, пока они не понадобятся. Например, если вы вызываете стороннюю библиотеку только из SomeMethod (), сторонняя DLL обычно не загружается до тех пор, пока SomeMethod () не запустится.
AppDomain.GetAssemblies () предоставляет вам все сборки, которые уже были загружены в текущий AppDomain. BuildManager.GetReferencedAssemblies () возвращает список всех сборок, на которые есть ссылки в Web.config и других местах, и загружает эти сборки в текущий домен приложения.
Вот отработанный пример вышесказанного.
- SomeMethod () еще не запущен.
- Call 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 () загрузил стороннюю библиотеку в текущий домен приложений от вашего имени.
Конечно, все это подлежит определенной оптимизации и т. Д., Но общая идея верна.