Unmanaged (native) library loading algorithm
本文内容
Unmanaged libraries are located and loaded with an algorithm involving various stages.
The following algorithm describes how native libraries are loaded through PInvoke
.
PInvoke load library algorithm
PInvoke
uses the following algorithm when attempting to load an unmanaged assembly:
Determine the
active
AssemblyLoadContext. For an unmanaged load library, theactive
AssemblyLoadContext is the caller of thePInvoke
.For the
active
AssemblyLoadContext, try to find the assembly in priority order by:Checking its cache.
Calling the current System.Runtime.InteropServices.DllImportResolver delegate set by the NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) function.
Calling the AssemblyLoadContext.LoadUnmanagedDll function.
Checking the AppDomain instance's cache and running the Unmanaged (native) library probing logic.
Raising the AssemblyLoadContext.ResolvingUnmanagedDll event for the
active
AssemblyLoadContext.
If the unmanaged library is newly loaded, the AppDomain.AssemblyLoad event is raised.