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

发布于 2024-08-03 13:37:47 字数 744 浏览 3 评论 0原文

我正在尝试使用 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 实现的目标是否可能实现?

I'm trying to use ILMerge to internalize some transitively referenced assemblies into an assembly I'm referencing to eliminate conflicts with those transitive dependencies elsehwere in my project.

In particular, I'm referencing Antlr3.StringTemplate (hereafter referred to as AS, available here: http://www.stringtemplate.org/download.html). It references Antlr3.Runtime.Debug (ARD) and Antlr3.Runtime (AR). ARD itself also references AR. In ASCII-art, that's:

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

Because another assembly I'm using, NHibernate 2.1, depends on different, incompatible version of AR, I wanted to use ILMerge to merge and internalize AR into AS. In theory, I think this should work; however, I'm having trouble executing the theory.

No matter what permutations and options I try, I end up with an error of the following form:

ILMerge.Merge: The assembly
'Antlr3.Runtime.Debug' was not merged
in correctly. It is still listed as an
external reference in the target
assembly.

Is what I'm trying to accomplish with ILMerge even possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮萍、无处依 2024-08-10 13:37:47

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

When you run ILMerge from the command line (or within an MSBuild task), of all the assembly files you list out to be merged, it is the first one that is considered the primary assembly when the merging begins. If you haven't already, ensure that the AS assembly filename is listed first in you list of merging assemblies.

长发绾君心 2024-08-10 13:37:47

ILMerge 的最新版本有一个 /lined 选项,该选项适用于合并程序集的传递闭包。它解决了这个确切的问题(请参阅 ILMerge.doc 用户手册中的 2.6 Closed4.1 输入程序集未正确合并 部分)。

The most recent version of ILMerge has a /closed option which works on the transitive closure of the merged assemblies. It solves this exact problem (see sections 2.6 Closed and 4.1 Input assembly not merged in correctly in the ILMerge.doc user manual).

遗心遗梦遗幸福 2024-08-10 13:37:47

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

I ended up having to ILMerge all of my Nhibernate related .dlls into one to get it to sit nicely with StringTemplate. Probably not the answer you were hoping for but it works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文