如何将.NET Framework 4.6控制台应用打包为不含运行时的单EXE文件
将.NET Framework 4.6控制台应用打包为单个独立EXE(不含运行时)
.NET Framework和.NET 5+的打包机制完全不同,没法直接用dotnet publish的单文件参数。下面是两种可行的方案,帮你把应用打包成单个EXE文件:
方法1:用Costura.Fody(最省心的方式)
- 右键你的项目 → 管理NuGet程序包,搜索
Costura.Fody并安装 - 安装完成后正常编译项目,输出目录里的主EXE就是已经嵌入所有依赖DLL的单个文件
- 原理:这个工具会自动把所有依赖的DLL嵌入到主EXE里,程序运行时会自动将这些DLL提取到临时目录使用,不需要额外配置
方法2:用ILMerge手动合并
- 先获取ILMerge工具:可以通过NuGet安装
ILMerge包,或者直接下载其可执行文件 - 编译你的控制台应用,确保所有依赖的DLL都和主EXE在同一个输出目录(比如
bin\Release) - 打开命令提示符,切换到ILMerge的所在目录,执行合并命令:
ILMerge.exe /out:FinalApp.exe YourConsoleApp.exe Dependency1.dll Dependency2.dll/out参数指定合并后生成的单个EXE文件名- 后面依次列出你的主程序EXE以及所有需要合并的依赖DLL
- 执行完成后,生成的
FinalApp.exe就是单个可执行文件
重要提醒
- .NET Framework是依赖系统全局安装的运行时,所以不可能把运行时打包进EXE,必须确保目标机器已经安装了.NET Framework 4.6
- 上面两种方法都是把应用的依赖DLL合并到主EXE中,实现单个文件分发,运行时还是需要依赖系统的.NET Framework
内容的提问来源于stack exchange,提问作者Niyozbek Mirzayev
相关产品推荐
相关产品推荐

