是否可以成功将传递程序集引用与ILMerge合并?

时间:2009-08-27 13:54:09

标签: .net antlr ilmerge stringtemplate

我正在尝试使用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完成什么?

3 个答案:

答案 0 :(得分:5)

最新版本的ILMerge有一个/closed选项,可用于合并程序集的传递闭包。它解决了这个确切的问题(请参阅ILMerge.doc用户手册中的2.6 Closed4.1 Input assembly not merged in correctly部分。)

答案 1 :(得分:4)

当您从命令行(或在MSBuild任务中)运行ILMerge时,在您列出要合并的所有程序集文件中,第一个被认为是合并开始时的主要程序集如果尚未安装,请确保在汇编程序集列表中首先列出AS程序集文件名。

答案 2 :(得分:0)

我最终必须将所有与Nhibernate相关的.dll ILMerge合并为一个,以使其与StringTemplate完美匹配。可能不是你希望的答案,但它确实有效。