Algoritmo de carregamento de biblioteca não gerenciado (nativo)
Os assemblies não gerenciados estão localizados e são carregados com um algoritmo que envolve várias fases.
O algoritmo a seguir descreve como as bibliotecas nativas são carregadas por meio de PInvoke
.
Algoritmo de carregamento de biblioteca PInvoke
PInvoke
usa o seguinte algoritmo ao tentar carregar um assembly não gerenciado:
Determinar o
active
AssemblyLoadContext. Para uma biblioteca de carregamento não gerenciada, o AssemblyLoadContext deactive
é aquele com o assembly que define oPInvoke
.Para o
active
AssemblyLoadContext, tente localizar o assembly em ordem de prioridade:Verificando o respectivo cache.
Chamando o delegado atual System.Runtime.InteropServices.DllImportResolver definido pela função NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver).
Chamando a função AssemblyLoadContext.LoadUnmanagedDll no AssemblyLoadContext de
active
.Verificando o cache da instância AppDomain e executando a lógica de Investigação de biblioteca não gerenciada (nativa).
Gerando o evento AssemblyLoadContext.ResolvingUnmanagedDll para o AssemblyLoadContext de
active
.