大道至简,知易行难
广阔天地,大有作为

使用ILMerge将.Net的DLL文件打包到EXE中

ILMerge是微软官方发布的.Net可执行文件打包工具,可以将多个.NET程序集合并为一个程序集。ILMerge可以作用于可执行文件和DLL文件,并且可以有多种控制输出格式的选项。

一、官方介绍
ILMerge is a utility that can be used to merge multiple .NET assemblies into a single assembly. ILMerge takes a set of input assemblies and merges them into one target assembly. The first assembly in the list of input assemblies is the primary assembly. When the primary assembly is an executable, then the target assembly is created as an executable with the same entry point as the primary assembly. Also, if the primary assembly has a strong name, and a .snk file is provided, then the target assembly is re-signed with the specified key so that it also has a strong name.
ILMerge is packaged as a console application. But all of its functionality is also available programmatically.

二、下载ILMerge
在百度中直接搜索ILMerge最靠前的微软官方链接(https://www.microsoft.com/en-us/download/details.aspx?id=17630)是有问题的,通过该链接下载到的是早在2012年发布的陈旧2.12版本,存在BUG,例如下图中即便指定了目标平台也不能使用正确的Framework版本而最终导致合并出错:
旧版ILMerge错误使用低版本.Net的BUG

旧版ILMerge错误使用低版本.Net的BUG通过使用 /log 参数可以看出来:

mscorlib.dll用的是2.0版本的,这将导致所依赖的很多类找不到:

旧版ILMerge错误使用低版本.Net的BUG

旧版ILMerge错误使用低版本.Net的BUG

实际上,目前我们应该从https://www.nuget.org/packages/ilmerge/上下载,其GitHub地址为https://github.com/dotnet/ILMerge,其中也包括了较为详细的文档。直接在Visual Studio中使用NuGet包管理下载安装即可:

通过NuGet包管理器安装ILMerge

通过NuGet包管理器安装ILMerge

安装后,可以在Visual Studio工程的package目录下找到对应的可执行文件ILMerge.exe,形如:

三、使用ILMerge
ILMerge.exe是一个命令行工具,其命令行参数为:

需要注意指定.Net版本,并注意指定primary assembly即可。在真实场景中,我们通常使用如下的命令来合并:

四、使用ILMerge-GUI
ILMerge-GUI作为ILMerge的图形界面使用更为直观,ILMerge-GUI是开源的,其地址位于https://bitbucket.org/wvd-vegt/ilmergegui中。将其下载后与ILMerge.exe放置在同一目录中即可使用(ILMerge-GUI启动时会从几个默认路径中搜索ILMerge.exe,如果找不到就手工放在一起即可):

使用ILMerge-GUI

使用ILMerge-GUI

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » 使用ILMerge将.Net的DLL文件打包到EXE中

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址