非托管(本机)库加载算法
非托管库与涉及不同阶段的算法一起定位并加载。
以下算法描述如何通过 PInvoke
加载本机库。
PInvoke
加载库算法
PInvoke
在尝试加载非托管程序集时使用以下算法:
确定
active
AssemblyLoadContext。 对于非托管加载库,active
AssemblyLoadContext 是具有定义PInvoke
的程序集的算法。对于
active
AssemblyLoadContext,尝试通过以下方式按优先级排序来查找程序集:检查其缓存。
调用由 NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) 函数设置的当前 System.Runtime.InteropServices.DllImportResolver 委托。
对
active
AssemblyLoadContext 调用 AssemblyLoadContext.LoadUnmanagedDll 函数。检查 AppDomain 实例的缓存并运行非托管(本机)库探测逻辑。
引发
active
AssemblyLoadContext 的 AssemblyLoadContext.ResolvingUnmanagedDll 事件。