来源:博客园
2023-04-18 18:02:17
(资料图片仅供参考)
参考帖子:(20条消息) C#如何加载程序运行目录外的程序集_c# probing privatepath_Jlins的博客-CSDN博客
(20条消息) Assembly resolve(自定义加载指定目录的程序集)_assemblyresolve_Mr蹇的博客-CSDN博客
这里感谢作者提供的信息!
我们在做程序开发时,总会引用各种各样的dll,有时候不想把dll文件放到主程序同一目录下,而是放到指定目录多个程序共享它,这时候需要借助AppDomain.CurrentDomain.AssemblyResolve事件。
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { DictionarydicDll = new Dictionary (); dicDll.Add("LinqToExcel.dll", @"C:\Users\Public\Documents\Alpha_Resources\LinqToExcel.dll"); dicDll.Add("MiniExcel.dll", @"C:\Users\Public\Documents\Alpha_Resources\MiniExcel.dll"); if (string.IsNullOrWhiteSpace(args.Name)) { return null; } string dllName = args.Name.Split(",")[0] + ".dll"; //判断是否已经加载过 foreach (var itemAssm in AppDomain.CurrentDomain.GetAssemblies()) { if (dicDll.Keys.Contains(itemAssm.ManifestModule.Name)) { return itemAssm; } } //将文件以二进制方式读取到内存,此方法可解决文件被占用的问题 byte[] buffer = System.IO.File.ReadAllBytes(dicDll[dllName]); //加载内存中的文件 return Assembly.Load(buffer); }
关键词: