【问题标题】:.NET EXE still tries to find a DLL after merging it using ILMerge.NET EXE 在使用 ILMerge 合并后仍会尝试查找 DLL
【发布时间】:2011-08-18 18:29:31
【问题描述】:

我正在尝试使用 ILMerge 工具进行简单的合并,以将 DLL 与可执行文件结合起来。合并本身工作正常,但在我运行合并的 EXE 后,它仍会尝试查找原始 DLL(就像它根本没有合并到 EXE 中一样)。

ILMerge 是自动更新对内部的引用还是我必须手动执行某些操作?我假设 ILMerge 会自动生成所有内容。

EXE 和 DLL 都是 WinForms .NET 3.5。

【问题讨论】:

  • 是什么样的项目?例如,ILMerge 不适用于 wpf。

标签: .net merge assemblies ilmerge


【解决方案1】:

ILMerge 自动完成几件事...
但是ILMerge实际上修改了DLL + EXE的内部结构...

并非所有的 DLL 等都“喜欢”被这种方式“弄乱”...

例如,当 EXE 和/或 DLL 使用反射或 WPF 合并可能会使它们失败...

在这些情况下,“嵌入”(而不是合并)效果最好……尽管您将不得不编写大约 10 行代码 - 请参阅 http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

如果您只是想要一个工具来实现这一点(以及其他一些事情),那么可以使用一些工具 - 例如 SmartAssembly...

但是请注意:以上任何一项都仅适用于 .NET DLL - 不适用于本机...

【讨论】:

  • 我实际上用多个 DLL 尝试过,但它们都不起作用。
  • 这真的取决于 DLL - 一些检查特定的东西,或者当反射正在播放时,合并也可能失败......无论如何,嵌入在这种情况下也可以工作:-)
【解决方案2】:

该问题是由尝试使用原始程序集的其他非合并 DLL 引起的。我也必须合并它们,现在一切正常。

【讨论】:

    【解决方案3】:

    有问题的 DLL 是否有可能尝试重新打开自己?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多