【C#】Winform嵌入dll到exe中

零、问题

最近在做一个上位机,需要保存数据,所以引用了一些Excel的组件,但是比较麻烦的是会多出几个DLL文件,压缩打包不方便使用,于是想能不能嵌入到exe中,只生成一个文件?

一、解决方案

找到生成的exe和dll,把用到的dll复制添加到项目里。

比如我的输出目录:

把这三个复制出来,放到工程里:

比如我的,我是放在项目的res文件夹下的lib文件夹里的,记住这个路径。

接下来设置一下这几个dll,把生成操作设置为“嵌入的资源”:

然后在主界面里添加如下代码:

namespace RespiratorMonitor
{
public partial class RMMainForm : Form
{ public RMMainForm()
{
// 监听载入资源
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; InitializeComponent();
} /// <summary>
/// 动态加载资源
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
/// <returns></returns>
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
//默认命名空间+文件夹名+.[注意]
string resourceName = "RespiratorMonitor.res.lib." + new AssemblyName(args.Name).Name + ".dll"; // LogHelper.Debug("在加载资源:" + resourceName);
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
if (stream != null)
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
} return null;
}
}
}
}

注意第23行,是默认命名空间.文件夹.文件夹.+后面的代码,我的默认命名空间是RespiratorMonitor,文件相对路径是res\lib

//默认命名空间+文件夹名+.
string resourceName = "RespiratorMonitor.res.lib." + new AssemblyName(args.Name).Name + ".dll";
  • 默认命名空间可以右键项目,属性,应用程序中看到。

二、效果

成功只生成一个文件,复制时只需要复制.exe文件就可以了。

三、参考资料

https://www.cnblogs.com/a849788087/p/6552977.html

【C#】Winform嵌入dll到exe中的更多相关文章

  1. C#中用ILMerge合并DLL和exe文件成一个exe文件或者DLL

    ILMerge是一个将多个.NET程序集合并到一个程序集中的实用程序.它既可以作为  开源使用,也可以作为NuGet包使用. 如果您在使用它时遇到任何问题,请与我们联系.(mbarnett _at_ ...

  2. .NET Winform 将引用的dll文件集成到exe中(转)

    Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法 ...

  3. 在Visual Studio中将dll以资源的形式嵌入exe中

    一.Dll的优点: 1.扩展应用程序的特性 2.简化项目管理 3.有助于节省内存 4.促进资源的共享 5.促进本地化 6.有助于解决平台间的差异 7.可用于特殊目的 有关于dll及注入相关理论资料,可 ...

  4. C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入

    C# 嵌入dll   在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...

  5. 其原因可能是堆被损坏,这说明**.exe中或它加载的任何DLL中有Bug

    最近在写一个写日志文件的线程时,调用了HeapAlloc/HeapFree 申请/释放堆缓冲内存.调用HeapFree释放有个条件就是,日志的空闲缓冲队列中内存块超过100个.在测试的时候,发现调用H ...

  6. 皮肤和DLL和图片等项目文件完全整合到exe中

    C#开发的程序原生界面实在是太丑了,自己又没有美化天赋,所以只能使用皮肤控件了,网上找到了IrisSkin2,包含一个.dll文件和若干ssk后缀的皮肤文件,代码其实很简单的.但是后来发现个问题,就是 ...

  7. 把任意的EXE嵌入到自己程序中

    把任意的EXE嵌入到自己程序中 taoyuan19822008-08-24上传   Delphi把任意的EXE嵌入到自己程序中的程序 资源积分:0分 下载次数:327 资源类型:其他 资源大小:175 ...

  8. 把exe嵌入到自己的exe中。delphi xe3

    下面是一个把exe程序嵌入到我们自己的exe中.开发环境 Delphi XE3 Version 17.0.4625.53395.OS环境WIN7 SP1,由于xe3版本的引用库发生变化.换成其他版本的 ...

  9. 中触发一个断点 其原因可能是堆被损坏,这说明 ***.exe 中或它所加载的任何 DLL 中有 Bug

    软件中使用了DevComponents.DotNetBar2.dll MessageBoxEx.Show("ddd");运行到这句出现这个错误 : 中触发一个断点 其原因可能是堆被 ...

  10. 其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL 中有 bug

    1.代码如下: string src ="abcdabcd"; char* dst = new char[8]; strcpy(dst,src.c_str()); delete[] ...

随机推荐

  1. C# Unit test TestInitialize\TestCleanp

    C# TestInitialize\TestCleanp ※※冰馨※※ 2020-12-15 09:19:37 75 收藏分类专栏: VS版权 VS专栏收录该内容197 篇文章1 订阅订阅专栏带有[C ...

  2. c# 多线程 lock

    模拟10个线程,每个线程模拟100次取钱: 其实就是相当于1000个人来同时取钱.当然实际情况是取钱的人分布在不同的地区的取款机取钱.同一个取款机只能一个人操作. 关键是要保证取钱的余额要准确,不能在 ...

  3. Linux blkid命令

    Linux blkid命令:显示块设备属性. Linux blkid命令 功能描述 使用blkid命令可以用来查询系统的块设备(包括交换分区)所使用的文件系统类型.卷标.UUID等信息. Linux ...

  4. Java一个入门级MVC基于Spring Boot项目

    首先根据上一篇文章内容创建一个Spring Boot项目,如图所示: 一,创建Controller并返回数据 在src/main/java/项目文件夹下面创建package,继续里面可以创建模块的pa ...

  5. superset 其他相关设置

    重置账号密码: superset fab reset-password --username adminuser --password yourpassword 如 superset fab rese ...

  6. 转载:大模型所需 GPU 内存笔记

    转载文章:大模型所需 GPU 内存笔记 引言 在运行大型模型时,不仅需要考虑计算能力,还需要关注所用内存和 GPU 的适配情况.这不仅影响 GPU 推理大型模型的能力,还决定了在训练集群中总可用的 G ...

  7. 搭建 VuePress 站点必做的 10 个优化

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 在搭建这 ...

  8. redis安装、多实例和配置、及服务器性能优化

    同一台服务器部署不同应用或者同一应用部署不同环境,需要redis服务多开防止数据冲突问题. 一.安装redis 需要安装gcc编译工具 yum install gcc -y 源码安装默认Redis程序 ...

  9. SecureCRT 屏幕输出行数设置

    第一步:打开设置 第二步:设置历史展示行数 第三步:保存后重启软件即可

  10. 满血 DeepSeek 现可无需等待免费使用暨第三方 API 平台横评

    亮点:高可用的 API 平台,新人免费 100 万 token ,DeepSeek-R1 (671B)与 DeepSeek-V3 模型享五折优惠,活动时间为2025年02月12日18:00:00~20 ...