1、我们先建一个类库里面内容如下
namespace ClassLibrary3
{
public class Class1
{
public string GetTime()
{
return "现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}
2、生成dll 生成的dll 名称是ClassLibrary3.dll 我们把这个dll 拷贝到项目下
3、引用ClassLibrary3.dll 选择生成方式为:嵌入的资源,注意下面是拷贝到项目下的DLL
4、程序入口 初始化时加下面代码
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//原创来自 www.luofenming.com
//初始化时添加下面代码
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{//注意WindowsFormsApplication1 这个是主程序的命名空间
string resourceName = "WindowsFormsApplication1." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
Application.Run(new Form1());
}
5、调用引用ClassLibrary3.dll 里面的方法 代码如下
private void button1_Click(object sender, EventArgs e)
{
ClassLibrary3.Class1 cl = new ClassLibrary3.Class1();
string s = cl.GetTime();
MessageBox.Show(s);
}
这样ClassLibrary3.dll和exe 打包生成到了一个exe文件里面了
二 也可以
private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
{
// 这句话放在窗口加载之前调用
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
// 拿到 temo 命名空间下的 dll 文件夹里面的 ... dll 文件
string _reaName ="temp.dll" + new System.Reflection.AssemblyName(e.Name).Name + ".dll";
using (var _stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(_reaName)) {
byte[] _data = new byte[_stream.Length];
_stream.Read(_data,0,_data.Length);
return System.Reflection.Assembly.Load(_data);
};
}
参考下图
方式二