【问题标题】:Is it possible to successfully merge transitive assembly references with ILMerge?是否可以将传递程序集引用与 ILMerge 成功合并?
【发布时间】:2009-08-27 13:54:09
【问题描述】:

我正在尝试使用 ILMerge 将一些传递引用的程序集内化到我正在引用的程序集中,以消除与我项目中其他传递依赖项的冲突。

特别是,我引用了 Antlr3.StringTemplate(以下简称 AS,可在此处获取:http://www.stringtemplate.org/download.html)。它引用了 Antlr3.Runtime.Debug (ARD) 和 Antlr3.Runtime (AR)。 ARD 本身也引用了 AR。在 ASCII-art 中,就是:

AS ---> ARD
\        |
 \       v
  \---> AR

因为我正在使用的另一个程序集 NHibernate 2.1 依赖于不同的、不兼容的 AR 版本,所以我想使用 ILMerge 将 AR 合并并内化到 AS 中。从理论上讲,我认为这应该可行;但是,我在执行该理论时遇到了麻烦。

无论我尝试什么排列和选项,最终都会出现以下形式的错误:

ILMerge.Merge:程序集 'Antlr3.Runtime.Debug' 未合并 在正确。它仍然被列为 目标中的外部参考 组装。

我想通过 ILMerge 实现的目标是否可行?

【问题讨论】:

  • 您有什么证据表明您收到的错误消息是由于传递程序集引用引起的?根据您提供的信息,听起来这只是 ILMerge 中的一个随机错误。可能与此相同的错误:connect.microsoft.com/VisualStudio/feedback/…

标签: .net antlr ilmerge stringtemplate


【解决方案1】:

当您从命令行(或在 MSBuild 任务中)运行 ILMerge 时,在您列出要合并的所有程序集文件中,第一个 被视为 合并开始时的主程序集。如果您还没有,请确保 AS 程序集文件名列在合并程序集列表的首位。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我最终不得不将所有与 Nhibernate 相关的 .dll 合并为一个,以使其与 StringTemplate 很好地配合。可能不是您希望的答案,但它有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-03
        • 2012-07-31
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 2020-07-28
        相关资源
        最近更新 更多