Algoritmo di caricamento delle librerie non gestite (native)
Le librerie non gestite vengono individuate e caricate con un algoritmo che prevede varie fasi.
L'algoritmo seguente descrive come vengono caricate le librerie native tramite PInvoke
.
Algoritmo di caricamento delle librerie PInvoke
PInvoke
usa l'algoritmo seguente durante il tentativo di caricare un assembly non gestito:
Determinare
active
AssemblyLoadContext. Per una libreria di caricamento non gestita, l’AssemblyLoadContextactive
è quello con l'assembly che definisce l'oggettoPInvoke
.Per
active
AssemblyLoadContext, provare a trovare l'assembly in ordine di priorità in base a:Verifica della cache.
Chiamata del delegato corrente System.Runtime.InteropServices.DllImportResolver impostato dalla funzione NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver).
Chiamata della funzione AssemblyLoadContext.LoadUnmanagedDll nell’AssemblyLoadContext
active
.Verifica della cache dell'istanza AppDomain ed esecuzione della logica di probe della libreria non gestita (nativa) .
Generazione dell'evento AssemblyLoadContext.ResolvingUnmanagedDll per l’AssemblyLoadContext
active
.