当前位置: 首页 > news >正文

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

一.打包为单一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.lqws.cn/news/104563.html

相关文章:

  • 超临界二氧化碳再热再压缩布雷顿循环建模与先进控制
  • websocket协议
  • 06 APP 自动化- H5 元素定位
  • 网络编程(计算机网络基础)
  • @Resource和@Autowire
  • Go语言学习-->编译器安装
  • python学习打卡day43
  • 前端​​HTML contenteditable 属性使用指南
  • windows安装多个版本composer
  • 燃尽图和甘特图
  • “刹车思维”:慢,是为了更快
  • 超声波粒度仪市场报告:行业现状、竞争格局与未来趋势分析
  • 【基础】Unity中Camera组件知识点
  • 49套夏日小清新计划总结日系卡通ppt模板
  • 《Effective Python》第六章 推导式和生成器——使用类替代生成器的 `throw` 方法管理迭代状态转换
  • 香橙派3B学习笔记6:基本的Bash脚本学习_UTF-8格式问题
  • 使用 Python + ExecJS 获取网易云音乐歌曲歌词
  • 红黑树与红黑树的插入——用C++实现
  • 关于list集合排序的常见方法
  • JAVA获取ES连接并查询所有数据
  • Eigen实现非线性最小二乘拟合 + Gauss-Newton算法
  • Server2003 B-1 Windows操作系统渗透
  • Java项目OOM排查
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus X实例的小说转语音助手应用构建实录
  • JS对数据类型的检测
  • CppCon 2014 学习:Lightning Talk: Writing a Python Interpreter for Fun and Profit
  • Java 调用第三方接口注意事项
  • Axure设计案例:滑动拼图解锁
  • 电子电路:全面深入了解晶振的定义、作用及应用
  • WordPress 6.5版本带来的新功能