代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

Windows 7 64中.NET合并DLL的BadImageFormatException

  •  2
  • Sarah Vessels  · 技术社区  · 14 年前

    我正在用visualstudio2008在windows7 64位上开发。我有一个类库集合,我使用ILMerge将它们合并到一个DLL中。然而,当我尝试使用这个合并的DLL时,我得到了

    BadImageFormatException

    我一直在四处寻找这方面的帮助,看起来我需要在MyMergedDll中的每个项目中设置Build属性以x86为目标,所以我就这样做了。我还将web服务中引用MyMergedDll的所有非MSTest项目设置为目标x86。不过,我还是有这个错误。

    this blog entry 可以相信的是,我可以通过以下操作得到这个错误:

    public class SpecificClass: BaseClass: where T : class { }
    

    也就是说,在泛型上有类约束。不过,这篇博文是2007年的,所以我不知道这是否仍然适用。在跟踪项目中的每个泛型类以检查约束之前,我想从StackOverflow得到一些信息,让你们知道问题出在哪里。

    BadImageFormatException 当我建立在释放模式。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Sarah Vessels    14 年前

    我想这是因为我做了两件事:

    1. 使用MyMergedDLL的控制台应用程序被设置为在调试模式下以x86为目标,而不是在发布模式下,因此它将在调试模式下工作,但给出 BadImageFormatException

    第一件事可能没有必要。我想我只需要MyMergedDLL的使用者也将x86作为发布模式的目标。我一直搞不清楚我使用的是哪个版本的ILMerge,所以我用微软网站上最新的MSI重新安装了它。

        2
  •  0
  •   Community CDub    8 年前

    你仔细检查过你使用的ILMerge版本了吗?

    我这样问是因为一个旧的、不正确的aspnet\u merge版本(它基本上对dll进行了相同的合并)导致我们遇到了与您所描述的相同的问题。我回答的时候讲了一些细节 this 向其他人提问。

    也许有必要快速查看一下ILDASM中的dll(在尝试反编译这些糟糕的dll时,Reflector往往会崩溃——也许是不引人注意的),看看您是否能够找出损坏的点以及代码中对应的内容,因为它可能会揭示问题。

    推荐文章