将C++ DLL打包进WinForm可执行文件中
本文最后更新于:2025年2月11日 晚上
在做C#开发时碰到了调用C++ DLL的需求,在C#中使用DLL并不复杂,但当时比较麻烦的需求是要将整个WinForm项目打包成一个可执行的exe文件。
首先,在.Net开发环境中,DLL有两种,分别是托管DLL和非托管DLL。我们可以简单理解为,托管DLL就是在.Net环境生成的DLL文件,而非托管DLL是不在.Net环境生成的DLL文件。更详细的区别可以看这。
ILMerge
ILMerge是巨硬官方推出的,用于在生成项目时合并DLL到exe的工具,但很可惜,他只支持合并托管的DLL。
当时我先编译出了一个非托管的DLL,发现存在上述问题。我又改写编译了一个托管版的,虽然能够直接通过添加引用导入该DLL,也能够在方法查看器中看到其中的所有方法,但ILMerge仍然认为这是一个非托管DLL。
我觉得ILMerge不怎么好用,于是便开始寻找其他工具。
Costura.Fody
在Nuget安装Costura.Fody后,Fody会做为依赖一同被添加进来,我在VS2015环境下,使用最新版本会遇到兼容性错误,所以使用旧版本VS需要手动降级。
安装完需要手动添加配置文件
配置文件内容
1 |
|
非托管DLL需要放到固定名称的文件夹中,且32位与64位需要分别放置,Costura.Fody会自动将这两个文件夹中的内容合并到exe中。
将C++ DLL打包进WinForm可执行文件中
https://jenscc.github.io/2021/08/21/C-与DLL/