C# winform 如何将多个dll打包生成一个可执行的exe文件中

相关的视频教教程 https://www.bilibili.com/video/BV1sZ4y1F74A?share_source=copy_web
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文件里面了

评论

  1. 175.0.51.*2021-08-02 15:14:28
    厉害

  2. 120.239.196.*2021-07-09 17:24:12
    是的,有几个dll 都可以这样操作

  3. 111.174.119.*2021-07-09 11:53:03
    有几个dll文件,也可以这样操作吗??

  4. 120.239.196.*2021-05-21 10:10:22
    用Costura.Fody 可以将多个dll合成一个dll

  5. 122.224.127.*2021-05-20 14:55:56
    如果是dll类库文件呢?能不能将引用的dll作为资源添加在里面?