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

C# 只想要一个exe文件,试试这个方式

admin
2023年12月3日 23:5 本文热度 587

前言

诚然,在之前的文章中也有写过将所有文件合入到一个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);

}

 实现效果


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

可参考文章



C#资源文件的使用




如何将程序打包成exe




C# 反射之动态生成dll/exe




Visual Studio 预先/后期 生成事件


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