1、在项目中创建文件夹并将需要打包的dll放进文件夹中
这里我创建了一个文件夹 res并将需要打包的dll文件“a.dll”添加进此文件夹中。
vs中设置dll文件的属性“生成操作”为“嵌入的资源”
2、在exe的入口或者窗体的构造函数中添加如下代码
//添加程序集解析事件
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
return LoadFromResource("a.dll");
}
private Assembly LoadFromResource(string resName)
{
Assembly ass = Assembly.GetExecutingAssembly();
using (Stream stream = ass.GetManifestResourceStream("WpfApplication3.res." + resName))
{
byte[] bt = new byte[stream.Length];
stream.Read(bt, 0, bt.Length);
Assembly asm = Assembly.Load(bt);//转换流到程序集
return asm;
}
return null;
}
3、 当找不到程序集时就会触发程序集加载失败事件然后就从资源文件加载, 先转换为字节数组再转换到程序集返回给程序,
这样dll就被加载到程序中了.