做一个热插拔项目时候用Assembly.LoadFile导致了dll(依赖的dll也通过Assembly.LoadFile),使用时候会报错,提示:
未能加载文件或程序集“PageAdmin.WeiXin.BLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
网上解决方法是注册一个AssemblyResolve事件
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { AssemblyName assemblyName = new AssemblyName(args.Name); return Assembly.LoadFrom("/App_Data/Plugins/" + assemblyName.Name + ".dll"); }
AssemblyResolve作用是加载的dll如果报错或需要依赖其他dll没有找到,就会触发这个事件,实际测试发现这个事件有坑,会导致死循环(具体原因不详)
最后改为Assembly.LoadFrom()来解决,LoadFrom导入dll同时会导入同目录下的依赖dll文件,彻底解决了上面的问题。