C#将dll打包到程序中
2015-10-10 10:13
696 查看
直接进入主题
先来看一个栗子,假设现在有一个第三方dll
LoadResourceDll
代码下载
先来看一个栗子,假设现在有一个第三方dll
using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; namespace blqw { /// <summary> 载入资源中的动态链接库(dll)文件 /// </summary> static class LoadResourceDll { static Dictionary<string, Assembly> Dlls = new Dictionary<string, Assembly>(); static Dictionary<string, object> Assemblies = new Dictionary<string, object>(); static Assembly AssemblyResolve(object sender, ResolveEventArgs args) { //程序集 Assembly ass; //获取加载失败的程序集的全名 var assName = new AssemblyName(args.Name).FullName; //判断Dlls集合中是否有已加载的同名程序集 if (Dlls.TryGetValue(assName, out ass) && ass != null) { Dlls[assName] = null;//如果有则置空并返回 return ass; } else { throw new DllNotFoundException(assName);//否则抛出加载失败的异常 } } /// <summary> 注册资源中的dll /// </summary> public static void RegistDLL() { //获取调用者的程序集 var ass = new StackTrace(0).GetFrame(1).GetMethod().Module.Assembly; //判断程序集是否已经处理 if (Assemblies.ContainsKey(ass.FullName)) { return; } //程序集加入已处理集合 Assemblies.Add(ass.FullName, null); //绑定程序集加载失败事件(这里我测试了,就算重复绑也是没关系的) AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve; //获取所有资源文件文件名 var res = ass.GetManifestResourceNames(); foreach (var r in res) { //如果是dll,则加载 if (r.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) { try { var s = ass.GetManifestResourceStream(r); var bts = new byte[s.Length]; s.Read(bts, 0, (int)s.Length); var da = Assembly.Load(bts); //判断是否已经加载 if (Dlls.ContainsKey(da.FullName)) { continue; } Dlls[da.FullName] = da; } catch { //加载失败就算了... } } } } } }
LoadResourceDll
代码下载
相关文章推荐
- C#基础----Linq之List<T>篇
- C#之结构、枚举和运算符
- C#创建Window Service
- c# wince textbox 选择全部内容
- C# 泛型理解之大白话
- C#高级篇(二)---LINQ、反射、线程
- 【C#】listview应用
- C#网线程里传参数的方法总结
- C#程序(含多个Dll)合并成一个Exe
- 关于C#中的接口
- C# 使用MEF动态加载不同的userControl,并实现不同userControl之间通信
- C# DataRow 比较
- C# DataRow 比较
- C# 对象比较(值类型、引用类型)
- C# 对象比较(值类型、引用类型)
- c# 应用程序部署发布
- C# 将数据表导出到Excel通用方法
- 20151009 C# 第一篇 程序编写规范
- 20151009 C# 第一篇 基础知识
- C# 获得对象属性和属性值 C#利用反射遍历对象的属性和属性值