当前位置: 首页>后端>正文

U8二次开发-动态加载程序集

开始介绍U8的二次开发动态加载程序集功能之前,先来了解一些基础知识,文末将提供对应的源代码示例包。

解析程序集加载

做过开发的同学都知道,常规情况下,应用依赖的dll文件或者第三方库,要么都放在bin目录中,要么都放到和exe平级的目录下,或者全局共享目录GAC中,有时候还得放点东西到Windows目录下。其实这些都是Net平台加载dll常规探测路径之一,属于默认行为,当在这些目录找不到当前运行程序引用的程序集时,就会异常并提示错误:未能加载****版本程序集文件。我们也见怪不怪了,提示啥dll缺失,就去找对应版本的dll文件,拷贝到当前运行目录,多半就能正常运行了。但是有时候遇到版本强签名或者版本不匹配就呜呼了。

其实Net平台提供了API让开发人员可以自行控制程序集探测路径,如此就方便灵活了很多,还可以带来不少好处,原文如下:

基本原理是响应特殊的委托事件,即注册 AssemblyResolve 事件的处理程序后,每当程序运行时无法按名称绑定到程序集时,此处理程序都将被调用。

//当程序集(Assembly)通过反射加载失败的时候会触发AssemblyResolve事件,这里注册AssemblyResolve事件的处理函数为CurrentDomain_AssemblyResolve
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

//当类型(Type)通过反射加载失败的时候会触发TypeResolve事件,这里注册TypeResolve事件的处理函数为CurrentDomain_TypeResolve
AppDomain.CurrentDomain.TypeResolve += Current

https://www.xamrdz.com/backend/3wx1896612.html

相关文章: