VS下C++及C#项目打包发布方法

article/2025/6/8 0:07:16

一.打包为单一exe文件

1.打开项目属性页(右键项目 → 属性)

2.选择配置(如 Release)

3.项目属性→ C/C++ → 代码生成→ 运行库

  将 运行时库(Runtime Library) 设置为:

  /MT(Release 模式)

  /MTd(Debug 模式)

注意:不要选择 /MD 或 /MDd,否则会动态链接运行时库。

4.程序测试查看

  程序要加入system("pause");或者while(1)循环,这样cmd窗口不会马上消失,便于测试查看

5.其他注意事项

a.确保所有依赖库也是静态链接

  将这些库以静态库(.lib)形式链接,而不是动态链接(.dll)。

b.如果使用的是第三方动态库(如 zlib、libpng 等),则需要:

  找到对应的静态库版本(.lib)

  或者自行编译为静态库

  然后将它们链接到你的项目中

  提示:如果使用的是动态库(.dll),即使你静态链接了 VC++ 运行时,exe 仍然会依赖这些 dll,无法做到“完全独立”。

6.验证依赖项(确保无外部依赖)

使用以下工具检查你的 exe 是否还依赖其他 DLL:

方法一:使用 Dependency Walker(适用于旧版项目)

下载地址:http://www.dependencywalker.com/

打开你的 exe 文件,查看是否还有未解析的依赖项。

方法二:使用 VS 自带的 dumpbin 工具

dumpbin.exe  /DEPENDENTS  your_program.exe

如果输出中没有列出任何外部 DLL(如 vcruntime140.dll),说明你已经成功静态链接了所有依赖。

安装路径: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx86\x64\dumpbin.exe

静态库 vs 动态库:

静态库(.lib):编译时链接到 EXE,不显示为依赖项

动态库(.dll):运行时加载,可用 /DEPENDENTS 查看

二.进阶:单文件打包(可选)

如果你希望将所有依赖(包括 dll)打包成一个 单个 exe 文件,可以使用以下工具:

Costura.Fody(适用于 .NET 项目)

Resource Hacker + 自定义加载器(适用于 C++ 项目,但复杂)

Enigma Virtual Box(将 exe 和 dll 打包成一个 exe)

这些方法较为复杂,适用于高级用户,建议优先使用静态链接实现“独立 exe”。

三.C#/.NET 项目(.NET Core/.NET 5+ 或 .NET Framework)打包方法

1.右键项目 → 发布(Publish)

在解决方案资源管理器中,右键点击项目 → 选择 发布。

2.选择目标位置

可以选择本地文件夹(如 Folder)或云服务(如 Azure)。

3.配置发布选项

框架(Target Framework) :选择目标框架(如 .NET 6.0)。

4.部署模式(Deployment Mode) :

框架依赖(Framework-dependent):需要目标机器安装对应 .NET 运行时。

独立(Self-contained):包含所有依赖,无需安装运行时(生成体积较大)。

目标运行时(Target Runtime) :选择平台(如 win-x64、win-x86)。

5.发布

点击 发布 后,生成的 .exe 文件和依赖项会输出到指定文件夹。

6.注意

C#项目编译后再bin目录下生成的exe会包含需要的dll文件,exe在文件夹内是可以直接运行的,其文件内的内容和发布的内容是一致的。所以和c++项目的打包有很大区别的,C#的更简单、更方便。


http://www.hkcw.cn/article/DuwdSbWJVh.shtml

相关文章

【免费】2004-2020年各省电力消费量数据

2004-2020年各省电力消费量数据 1、时间:2004-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、电力消费量(亿千瓦小时) 4、范围:31省 5、指标说明:电力消费量是指在一定时期内&#xff…

[Python] python信号处理绘制信号频谱

python信号处理绘制信号频谱:scipy.signal.welch 文章目录 python信号处理绘制信号频谱:scipy.signal.welch一、函数介绍二、核心参数详解三、返回值四、算法原理五、关键特性六、完整示例七、应用场景推荐配置八、常见问题解决九、与FFT方法的对比 scip…

【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节

摘要 图像增强是改善图像视觉效果的核心技术。本文将详解两种基础增强方法:通过直方图均衡化拉伸对比度,以及利用伽马校正调整非线性亮度。结合OpenCV代码实战,学会处理灰度图与彩色图的不同增强策略,理解为何彩色图像需在YUV空间…

Mybatis--创建mapper接口

创建mapper接口 MyBatis中的mapper接口相当于以前的dao(原来的dao是有dao的接口以及dao的实现类)。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。因为我们的mybatis里面有面向接口编程,只需要创建mapper接口…

vue3:Table组件动态的字段(列)权限、显示隐藏和左侧固定

效果展示 根据后端接口返回&#xff0c;当前登录用户详情中的页面中el-table组件的显示隐藏等功能。根据菜单id查询该菜单下能后显示的列。 后端返回的数据类型: 接收到后端返回的数据后处理数据结构. Table组件文件 <!-- 自己封装的Table组件文件 --> onMounted(()>…

力扣HOT100之多维动态规划:1143. 最长公共子序列

这道题之前刷代码随想录的时候做过&#xff0c;但是现在又给忘干净了&#xff0c;这道题需要用二维dp数组来做&#xff0c;看了一下自己当时写的博客&#xff0c;一下子就看懂了。这道题的子序列可以不连续&#xff0c;所以dp数组的定义和最长重复子数组不一样&#xff0c;我总…

无锁队列—C++内存序最佳实践

叙述方式&#xff1a; 1.背景介绍 &#xff08;使用场景&#xff09; 2.讲结论 (无锁队列实现) 3.讲内存序的使用&#xff08;通用方式&#xff09; 一、背景 本文通过一个“单生产者-单消费者”模型的场景&#xff0c;讲解基于C原子操作和内存序实现的无锁队列 在生产者…

ADC模数转换控制

目录 1. Convst信号的功能本质 1.1 核心作用 1.2 关键优势 1.3 Convst与SPI接口的协作关系 2.实际设计要点 2.1 硬件连接方案 2.2 时序约束&#xff08;以AD7685为例&#xff09; 2.3 多片ADC同步策略 3.高级应用技巧 3.1 动态调整采样率 3.2 抗干扰设计 3.3 故障排查 4.总…

QT常用控件(1)

控件是构成QT的基础元素&#xff0c;例如Qwidget也是一个控件&#xff0c;提供了一个‘空’的矩形&#xff0c;我们可以往里面添加内容和处理用户输入&#xff0c;例如&#xff1a;按钮&#xff08;QpushButton&#xff09;&#xff0c;基础显示控件&#xff08;Lable&#xff…

Linux系统-基本指令(5)

文章目录 mv 指令cat 指令&#xff08;查看小文件&#xff09;知识点&#xff08;简单阐述日志&#xff09;more 和 less 指令&#xff08;查看大文件&#xff09;head 和 tail 指令&#xff08;跟查看文件有关&#xff09;知识点&#xff08;管道&#xff09;时间相关的指令&a…

C 语言学习笔记(预处理和库文件)

内容提要 预处理库文件 预处理 预处理编译汇编链接 什么是预处理 预处理就是在源文件&#xff08;.c文件&#xff09;编译之前&#xff0c;所进行的一部分预备操作&#xff0c;这部分操作是由预处理器&#xff08;预处理程序&#xff09;自动完成。当源文件在编译时&#x…

谷歌地图高清卫星地图软件(Google Earth)v6.0.3.2197 中文版 - 前端工具导航

谷歌地图6.0Google Earth是一款谷歌地图高清卫星地图软件&#xff0c;能够实时监测并提供最准确的地图信息&#xff0c;地球上的任意一块地区都能够准确定位并放大查看&#xff0c;覆盖范围广&#xff0c;精度高&#xff0c;非常实用&#xff01; 谷歌卫星高清地图 下载链接&a…

全球治理指标数据(1996-2023)

1945 全球治理指标&#xff08;WGI&#xff09;(1996-2023&#xff09; 数据简介 全球治理指标&#xff08;WGI&#xff09;是一个由世界银行开发的综合性数据库&#xff0c;通过政治稳定、政府效能、监管质量、法治水平、腐败控制和公民话语权六个维度系统衡量全球各国的治理…

Blocked aria-hidden on an element because its descendant retained focus.

问题出在 Element UI 的 el-table 组件 全选功能上&#xff0c;这是一个常见的无障碍&#xff08;a11y&#xff09;问题。这个错误提示与网页 accessibility&#xff08;无障碍访问&#xff09;相关&#xff0c;涉及 aria-hidden 属性的不当使用。 问题原因分析 1. Element U…

2025 年人脸识别技术应用备案政策已落地

在 AI 技术深度渗透的当下&#xff0c;人脸识别作为重要的生物识别技术&#xff0c;已广泛应用于安防、金融、零售等多领域。但随之而来的个人信息安全风险也备受关注。2025 年 6 月 1 日起《人脸识别技术应用安全管理办法》正式实施&#xff0c;企业需重视人脸识别技术应用备案…

01电气设计-380V强电部分设计

目标&#xff1a;在电气设计过程中380V的强电部分&#xff0c;一般来自与工厂&#xff0c;一般为3相5线制的380V&#xff0c;下面的应用场景是当我的用电设备&#xff08;电机&#xff0c;冷水机&#xff0c;控制器&#xff0c;驱动器&#xff0c;激光器等等&#xff09;总功率…

文件批量重命名

mv只支持单个文件命名 批量重命名用rename 例子&#xff1a; #touch命令批量创建空文件&#xff0c;文件10-15 touch file{10..15}.txt批量重命名 # 批量重命名&#xff0c;file10-15重命名为test10-15 #这里file1? 匹配的是单个字符。比如10,11等 rename file1 test1 file1…

ES的开始

ES作用 在海量数据中&#xff0c;执行搜索功能&#xff0c;使用mysql&#xff0c;效率过低&#xff0c; 如果关键字输入不准确&#xff0c;一样可以搜索到想要的数据 讲搜索关键字&#xff0c;以红色字体展示 ES介绍 ES是基于java语言并且基于Lucene编写的搜索引擎框架&#x…

【论文解读】ReAct:从思考脱离行动, 到行动反馈思考

认识从实践开始&#xff0c;经过实践得到了理论的认识&#xff0c;还须再回到实践去。 ——《实践论》,毛泽东 1st author: About – Shunyu Yao – 姚顺雨 paper [2210.03629] ReAct: Synergizing Reasoning and Acting in Language ModelsReAct: Synergizing Reasoning and…

AXURE-动态面板

1.概述 动态面板原件&#xff0c;容器类的原件一个动态面板可以有多种状态 同一时刻只展示一个状态 默认展示第一个状态 主要用于多个状态的切换可拖动 1.1 创建 将原件库中的“动态面板”原件&#xff0c;直接拖动到工作区中&#xff0c;创建空白动态面板将页面中原件选中…