能否成功地将传递性程序集引用与ILMerge合并?

3

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

你有什么证据表明你收到的错误信息是由于传递性程序集引用引起的?根据你提供的信息,这似乎只是ILMerge中的一个随机错误。它可能是与此错误相同:https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=320999&wa=wsignin1.0 - Timwi
3个回答

5
最新版本的ILMerge有一个“/closed”选项,它可以在合并后程序集的传递闭包上工作。它解决了这个确切的问题(请参见ILMerge.doc用户手册中的2.6 Closed和4.1 Input assembly not merged in correctly部分)。

5
在命令行中运行ILMerge时(或在MSBuild任务中运行),您列出要合并的所有程序集文件中,被列在最前面的一个是在合并开始时被认为是主要程序集。如果您还没有这样做,请确保AS程序集文件名出现在您的合并程序集列表中的第一位。

0

最终我不得不将所有与Nhibernate相关的.dll文件合并成一个,以便与StringTemplate完美地配合。这可能不是你希望得到的答案,但它有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接