Visual Studio 2022 C# WinForm项目如何合并生成单个.exe文件
将C# WinForm项目打包为单个可执行文件的实现方法
针对Visual Studio 2022开发的WinForm项目,根据你使用的框架版本,二选一操作即可:
方案一:使用框架原生单文件发布(适用 .NET Core 3.0 / .NET 5 及以上版本)
不需要安装第三方工具,直接用VS自带的发布功能即可完成:
- 右键解决方案资源管理器中的项目节点,选择「发布」
- 发布目标选择「文件夹」,指定本地输出路径后完成创建
- 打开发布配置面板,点击「显示所有设置」,按如下参数配置:
- 部署模式选择 独立
- 目标运行时选择对应分发平台,比如
win-x64(不要选「可移植」,否则无法生成单文件) - 勾选「生成单个文件」
- 可选勾选「裁剪未使用的代码」,可以大幅缩小最终exe体积,注意如果项目中用到反射加载类型,需要额外测试避免裁剪掉必要依赖
- 对于项目中的2个.json文件:如果不需要用户手动修改配置,直接在解决方案资源管理器中选中json文件,右键打开属性面板,将「生成操作」设置为「嵌入的资源」即可自动打包进exe;如果需要运行时动态修改/允许用户手动改配置,不需要额外设置,发布时会自动将文件绑定到单文件中,程序启动时会自动读取,不影响正常使用
- 配置完成后点击「发布」,输出路径中生成的单个.exe文件就是完整可运行的程序,不需要附带其他dll、json文件。
也可以直接在项目根目录打开终端执行命令完成发布:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true
方案二:使用Costura.Fody打包(适用 .NET Framework 4.x 版本,兼容所有新老.NET项目)
如果你的项目是基于传统.NET Framework开发(比如WinForm常用的4.5、4.8版本),原生发布不支持单文件打包,用这个NuGet包可以快速实现依赖嵌入:
- 右键项目节点,选择「管理NuGet程序包」,搜索并安装最新稳定版的
Costura.Fody - 安装完成后不需要编写任何额外打包代码,重新生成项目时工具会自动把所有引用的dll文件嵌入到主exe中
- 对于2个.json文件:如果不需要用户修改,同样选中文件打开属性面板,将「生成操作」设为「嵌入的资源」即可;如果需要运行时读取嵌入的json,用如下代码读取资源流即可:
// 注意替换成你自己项目的默认命名空间、json文件名 using var stream = System.Reflection.Assembly.GetExecutingAssembly() .GetManifestResourceStream("你的项目默认命名空间.配置文件.json"); using var reader = new System.IO.StreamReader(stream); string jsonText = reader.ReadToEnd();
- 如果json需要支持用户手动修改,不要嵌入资源,在程序第一次启动时自动将内嵌的默认配置释放到exe同目录,后续直接读写同目录的json文件即可。
- 重新生成项目后,bin目录下的主exe就是整合了所有依赖的单文件,直接分发即可。
踩坑提示:如果打包后运行提示缺少依赖,检查下有没有把项目引用的所有dll的「复制本地」属性设为True,否则Costura.Fody不会把对应dll嵌入进去。
内容的提问来源于stack exchange,提问作者Again
相关产品推荐
相关产品推荐

