使用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
该项目大于三个程序集,但我设法将问题减少到了三个。如果我不包括程序集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合并。