Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управляемые сборки располагаются и загружаются алгоритмом, который состоит из различных этапов.
Все управляемые сборки, кроме спутниковых сборок и WinRT
сборок, используют тот же самый алгоритм.
Когда загружаются управляемые сборки?
Наиболее распространенный механизм активации нагрузки управляемой сборки — это ссылка на статическую сборку. Эти ссылки вставляются компилятором всякий раз, когда код использует тип, определенный в другой сборке. Эти сборки загружаются (load-by-name
) по мере необходимости средой выполнения. Точное время загрузки статических ссылок на сборку не указано. Она может варьироваться между версиями среды выполнения и зависит от оптимизаций, таких как встраивание.
Прямое использование следующих API также активирует нагрузки:
Алгоритм
Следующий алгоритм описывает, как среда выполнения загружает управляемую сборку.
Определите
active
AssemblyLoadContext.- Для ссылки
active
AssemblyLoadContext на статическую сборку используется экземпляр, загрузив ссылающуюся сборку. - Предпочитаемые API делают явным
active
AssemblyLoadContext . - Другие API выводят
active
AssemblyLoadContext. Для этих API используется свойство AssemblyLoadContext.CurrentContextualReflectionContext. Если его значение равноnull
, используется выводимый AssemblyLoadContext экземпляр. - См. таблицу в разделе "Когда загружаются управляемые сборки?" .
- Для ссылки
Методы
Load-by-name
загружают сборкуactive
AssemblyLoadContext в следующем порядке приоритета:- Проверьте его
cache-by-name
. - Вызовите функцию AssemblyLoadContext.Load.
-
AssemblyLoadContext.Default Проверьте кэш экземпляра и запустите логику проверки по умолчанию управляемой сборки. Если сборка только что загружена, ссылка AssemblyLoadContext.Default добавляется к экземпляру
cache-by-name
. - Инициировать событие AssemblyLoadContext.Resolving для активного контекста загрузки сборки.
- Воспроизведите событие AppDomain.AssemblyResolve.
- Проверьте его
Для других типов загрузок
active
AssemblyLoadContext загружает сборку в следующем порядке приоритета:- Проверьте его
cache-by-name
. - Загружается из указанного пути или из необработанного объектного файла сборки. Если сборка только что загружена, в экземпляр
active
добавляется ссылка AssemblyLoadContextcache-by-name
.
- Проверьте его
В любом случае, если сборка загружена недавно, то событие AppDomain.AssemblyLoad будет вызвано.