Алгоритм загрузки неуправляемых (собственных) библиотек
Неуправляемые библиотеки обнаруживаются и загружаются по специальному алгоритму, который состоит из нескольких этапов.
Следующий алгоритм описывает, как загружаются собственные сборки через PInvoke
.
Алгоритм PInvoke
для загрузки библиотек
PInvoke
использует следующий алгоритм при попытке загрузить неуправляемую сборку.
Определяется
active
AssemblyLoadContext. Для неуправляемой библиотекиactive
AssemblyLoadContext получает значение, соответствующее сборке, которая определяетPInvoke
.Для
active
AssemblyLoadContext выполняется попытка найти сборку в следующем порядке приоритета.Проверяется кэш.
Вызывается текущий делегат System.Runtime.InteropServices.DllImportResolver, заданный функцией NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver).
Вызывается функция AssemblyLoadContext.LoadUnmanagedDll в
active
AssemblyLoadContext.Проверяется кэш экземпляров AppDomain и выполняется логика зондирования неуправляемой (собственной) библиотеки.
Вызывается событие AssemblyLoadContext.ResolvingUnmanagedDll для
active
AssemblyLoadContext.