一、前言
有时候我们发布一个组件,不希望暴露出我们使用的dll,希望以最简洁的方式部署我们的组件。
比如一个自动更新组件,含有update.exe和a.dll,b.dll。
当我使用这个组件的时候,我希望把它本身的dll与exe进行合并,这样就避免了我在更新文件的过程中,遇到与自身调用的dll重名的文件无法更新的问题。(因为有可能业务系统也调用了2个dll,名字恰好叫做a.dll,b.dll)
二、ILMerge
据说是一个MS的牛人所做,官方下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en。
这玩意可以把.net平台下的组件进行合并。也包括非托管的组件哦~
工具下载下来之后,使用cmd命令可以进入ILMerge所在文件夹,然后我们就可以输入命令了:
命令格式如下:
ilmerge /ndebug /target:[输出文件类型] /out:[输出文件名]/log [要合并的文件1] [要合并的文件2] [要合并的文件3]
下面是例子:
1)我有一个exe,调用了一个dll
2)使用ILMerge将他们合并为一个exe:
命令:
结果:
三、其他
ILMerge也支持以编程方式进行上述操作,具体还没研究过,可以参考以下文章:
a)http://www.raymanzhai.com/article.asp?id=65
b)http://hi.baidu.com/xyesterday/blog/item/50e11f35535a79a5d1a2d3f6.html