LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 只想要一个exe文件,打包dll进去,试试这个方式

admin
2024年1月24日 23:30 本文热度 644

导读

诚然,在之前的文章中也有写过将所有文件合入到一个exe文件中的方式,一种是通过打包,一种是通过资源文件【文末附带链接】,但是两个方法到最后运行的时候都是需要释放出来,所以相对来说还是不够友好;现在,我们可以通过这篇文章用另一种方式来实现。


开发环境:.NET Framework版本:4.8

开发工具:Visual Studio 2022

实现步骤


  1. 以下测试我们要实现的是集成两个DLL,一个是自己的项目类库ClassLibrary1,另一个是使用第三方的Newtonsoft.Json.dll
  2. 在主程序中新建一个Lib文件夹,将Newtonsoft.Json.dll放入进去并引用。
  3. 在项目中新建一个类库ClassLibrary,并在其中随便实现一段代码方便调用

namespace ClassLibrary1

{

    public class Common

    {

        public int Add(int a,int b)

        {

            return a+b;

        }

    }

}

  1. 将以上类库生成后,同时引入到主程序中,并将生成的ClassLibrary1.dll放入到Lib文件夹中,最后项目框架如下

  1. 在引用下的两个dll右键->属性->复制本地改为False,这样就在生成的时候不会出现在debug目录下了
  2. 在Lib目录下的两个dll右键->属性->生成操作选择为嵌入的资源
  3. Program文件中注册AssemblyResolve事件,事件内的代码如下

private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)

        {

            string assemblyName = Assembly.GetExecutingAssembly().GetName().Name + ".Lib." + new AssemblyName(args.Name).Name + ".dll";

            using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(assemblyName))

            {

                byte[] buffer = new byte[stream.Length];

                stream.Read(buffer, 0, buffer.Length);

                return Assembly.Load(buffer);

            }

        }

  1. 以上,其实就完成了整个操作,但是由于ClassLibrary1项目是我们自己写的,随时会涉及到改动,每次都复制会比较麻烦,而且还有忘记的风险,所以,之前文章中写的生成事件就有用武之地了,我们在ClassLibrary1的生成后事件中添加以下命令,这样每次生成后就会自动复制到Lib目录了
copy "$(TargetPath)" "$(SolutionDir)\$(SolutionName)\Lib"
  1. 最后在窗体中分别实现调用

private void button1_Click(object sender, EventArgs e)

        {

           MessageBox.Show(""+new Common().Add(3, 4));

        }


private void button2_Click(object sender, EventArgs e)

        {

            Dictionary<string,object> dic=new Dictionary<string, object>();

            dic.Add("name", "张三");

            dic.Add("age", 20);

            string json = JsonConvert.SerializeObject(dic);

            MessageBox.Show(json);

        }

实现效果


☛☛☛点击此处下载源码☚☚☚


该文章在 2024/1/24 23:30:00 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved