使用MSBuild.ILMerge.Task将Dll支持库合并到主程序中

之前在开发一个便携式小工具,由于解析Json和解压ZIP需要用到Newtonsoft.Json和System.IO.Compression.ZipFile再加上一个用于二维码识别的Zxing和一个自己的Lib。一共四个Lib再加上主程序,这种体验十分的Orz,十分没有便携的感觉…

于是乎我就尝试来将exe与dll合并起来。对于.Net程序,要把dll合并到exe中去,比较常见的有ILMerge/LibZ或者将dll组件作为嵌入资源使用。

那么来说说最为常见的ILMerge,ILMerge是MS提供的命令行工具,有许多参数,亦有第三方开发的GUI。可以将dll很完美的嵌入到exe中去(需要注意的是如果是非托管的dll也可能会发生合并失败),但是命令行工具对于新手来说操作还是比较繁琐复杂。即便有GUI,如果你程序更新发布的比较频繁,一次次的手动合并也依旧是一种负担。

那么,怎么解决呢?这就要说到今天的主角了!当当当当!MSBuild.ILMerge.Task!(请脑补五毛效果音(不)

第一步, 使用Nuget图形界面或者命令安装ILMerge.MSBuild.Tasks(它会自动安装所需依赖的ILMerge)

PM> Install-Package ILMerge.MSBuild.Tasks

第二步,按下F5进行生成,打开你程序生成完成的目录,现在就是见证奇迹的时刻了!现在生成的exe已经包含dll,不再需要附加的dll了!

非常简单,只需要这样就搞定了!
当然如果你需要更改合并的顺序或者排除某个dll,你可以调整ILMerge.props来更改配置,编辑ILMergeOrder.txt来调整合并顺序或添加排除项目。

真的非常感谢ILMerge.MSBuild.Tasks的作者Alexander Nosenko,给我们大家带来了这么方便的工具。

最后的最后,再提醒一下大家,合并了dll到你的exe之后也不要忘记了在README中标注你所使用的开源库的开发者,或者依照许可证规定的保留你所使用的开源库的许可证。毕竟这是本就应该做的事情。

发表评论

电子邮件地址不会被公开。 必填项已用*标注