如何使用C#结合DLL生成可移植的.EXE免安装可执行文件?
C# 单文件便携版制作方案
1. 针对 .NET Core / .NET 5 及以上版本(原生支持,推荐)
不需要额外第三方工具,用微软自带的发布功能即可实现:
- 右键你的项目,选择「发布」,发布目标选择「文件夹」,进入发布配置页
- 点击「显示所有设置」,调整如下参数:
- 部署模式选择「独立」
- 勾选「生成单个文件」
- 可勾选「修剪未使用的代码」压缩最终文件体积
- 根据目标运行环境选择对应的运行时(比如
win-x64、win-x86)
- 如果你的外部DLL是非托管的C/C++ DLL,需要在项目
.csproj文件中添加如下配置,确保非托管DLL被打包进单文件:
<ItemGroup> <NativeFile Include="你的外部DLL本地路径\XXX.dll"> <Pack>true</Pack> <PackagePath>runtimes\win-x64\native</PackagePath> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </NativeFile> </ItemGroup>
- 配置完成后点击发布,输出目录即可得到单个exe文件,直接复制到其他Windows电脑就能运行,无需提前安装.NET运行时。
2. 针对 .NET Framework 版本
如果你的项目基于.NET Framework开发,可以使用Costura.Fody工具实现打包:
- 打开NuGet包管理器,给项目安装
Costura.Fody包 - 安装完成后默认会自动把所有托管DLL打包进exe,如果要包含非托管外部DLL,需要在项目根目录新建
FodyWeavers.xml配置文件,添加如下内容:
<Weavers> <Costura> <Unmanaged32Assemblies> 你的32位非托管DLL名称(不带.dll后缀) </Unmanaged32Assemblies> <Unmanaged64Assemblies> 你的64位非托管DLL名称(不带.dll后缀) </Unmanaged64Assemblies> </Costura> </Weavers>
- 把需要调用的外部DLL添加到项目中,设置文件的「复制到输出目录」属性为「如果较新则复制」
- 直接编译项目,输出目录的exe就是单文件便携版,运行时不需要额外附带DLL。
注意事项
- 如果你调用的外部DLL本身依赖其他系统组件,需要确认目标电脑已存在对应组件,否则还是会运行失败,这种情况可以把依赖的系统DLL按照上述步骤一同打包即可。
- 打包完成后建议先在无开发环境的电脑上测试运行,确认所有功能正常。
内容的提问来源于stack exchange,提问作者Angel Carrillo
相关产品推荐
相关产品推荐

