ILMerge无法合并:程序集“ xxx”未正确合并

时间:2019-02-07 16:00:56

标签: ilmerge

问题

使用ILMerge,我正在尝试合并三个程序集:A,B和C。它失败并显示以下错误消息。我真的需要帮助解决这个问题。

  

“ ILMerge.Merge:程序集'B'未正确合并。它仍被列为目标程序集中的外部引用。”

程序集A不引用其他两个。 B引用A。C引用A和B。

命令行:ilmerge / v2 / target:library /out:test.dll a.dll b.dll c.dll

我尝试过的

  • 使用/ closed参数。没有任何区别。
  • ILMerge的版本不同,版本3.0.21.3911和2.14.1208都出现相同的错误。
  • 首先合并A和B,然后在C中通过A + B合并。这不会产生任何错误消息,但是生成的文件已损坏。它无法运行,当我通过.NET Obfuscator运行时会抱怨它。

一些背景

该项目大于三个程序集,但我设法将问题减少到了三个。如果我不包括程序集C,而仅合并A和B,那么问题就消失了。

在以前的版本中,我没有这个问题。在这两个版本之间,只有非功能性的更改,例如重命名(没有程序集或名称空间,只有类,方法等)和访问修饰符的重新排序(static internal-> internal static)

来自文档

  

一个常见的问题是合并某些程序集后,您会收到一条错误消息   指出输入程序集未正确合并,因为它仍列为   合并程序集中的外部引用。此问题的最常见原因是   输入程序集之一B具有对错误合并的外部引用   程序集A,以及对另一个程序集C的外部引用,该程序集本身具有一个   外部引用A。假设对C的引用是采用参数的方法   其类型在A中定义。然后在C中调用方法的类型签名   甚至在合并的程序集中仍引用A中的类型。毕竟,ILMerge无法走   并修改程序集C,使其现在取决于在C中定义的类型   合并后的输出程序集!   解决方案是使用封闭选项(第2.6节)让ILMerge计算   输入组件的传递性闭合,以防止此类“悬挂参考”。在   在此示例中,这将导致三个组件A,B和C都合并。有   在没有外部引用A的情况下,无法将A和B合并。

0 个答案:

没有答案