我正在尝试使用ILMerge将一些可传递引用的程序集内化到我正在引用的程序集中,以消除与我的项目中的那些传递依赖项的冲突。
特别是,我引用了 Antlr3.StringTemplate (以下简称AS,可在此处获取:http://www.stringtemplate.org/download.html)。它引用了 Antlr3.Runtime.Debug (ARD)和 Antlr3.Runtime (AR)。 ARD本身也引用了AR。在ASCII艺术中,那是:
AS ---> ARD
\ |
\ v
\---> AR
因为我正在使用的另一个程序集,NHibernate 2.1,依赖于不同的,不兼容的AR版本,我想使用ILMerge将AR合并并内化到AS中。从理论上讲,我认为这应该有效;但是,我在执行理论时遇到了麻烦。
无论我尝试什么排列和选项,我最终都会遇到以下错误:
ILMerge.Merge:程序集 'Antlr3.Runtime.Debug'未合并 在正确的。它仍被列为 目标中的外部参考 组装
我正在尝试用ILMerge完成什么?
答案 0 :(得分:5)
最新版本的ILMerge有一个/closed
选项,可用于合并程序集的传递闭包。它解决了这个确切的问题(请参阅ILMerge.doc用户手册中的2.6 Closed
和4.1 Input assembly not merged in correctly
部分。)
答案 1 :(得分:4)
当您从命令行(或在MSBuild任务中)运行ILMerge时,在您列出要合并的所有程序集文件中,第一个被认为是合并开始时的主要程序集如果尚未安装,请确保在汇编程序集列表中首先列出AS程序集文件名。
答案 2 :(得分:0)
我最终必须将所有与Nhibernate相关的.dll ILMerge合并为一个,以使其与StringTemplate完美匹配。可能不是你希望的答案,但它确实有效。