【问题标题】:Avoiding BadImageFormatException when there is unmanaged code存在非托管代码时避免 BadImageFormatException
【发布时间】:2011-08-22 16:58:32
【问题描述】:

我有一个 Web 服务,每当我尝试从 Visual Studio 运行该服务时,它都会引发 BadImageFormatException。 This answer 另一个问题建议对 DLL 运行 peverify 以查看是否有任何问题。虽然我的网络服务的 DLL 很好,但网络服务依赖于一个 ILMerged 程序集,它确实有错误:

[IL]:错误:[C:\blah\MyILMergedAssembly.dll:加密

Utils.SecureStringExtensions::SecureEquals][offset 0x00000055][found unmanaged pointer] [expected unmanaged pointer] 堆栈上的非预期类型。

[IL]:错误:[C:\blah\MyILMergedAssembly.dll:加密

Utils.SecureStringExtensions::SecureEquals][offset 0x0000005D][found unmanaged pointer][expected unmanaged pointer] 堆栈上的非预期类型。

[IL]:错误:[C:\blah\MyILMergedAssembly.dll:加密

Utils.SecureStringExtensions::SecureEquals][offset 0x0000007E] 非托管指针不是可验证类型。

验证 .\MyILMergedAssembly.dll 时出现 3 个错误

(188 条警告)

我认为这些源于我在 MyILMergedAssembly 中对 MarshalIntPtr 的使用,但是在我这样做的任何地方,我都将方法声明为 unsafe。如何摆脱 peverify 给出的错误,并希望摆脱在尝试运行 Web 服务时出现的 BadImageFormatException?

编辑: 看起来我可能无法使用 ILMerge 来合并具有不安全代码的程序集。所以我尝试让我的 Web 服务引用 MyILMergedAssembly 中的所有单个 DLL,但我仍然得到一个 BadImageFormatException。现在它给了我一个单独的程序集的例外。当我在那个单独的程序集上运行 peverify 时,我得到:

[IL]:错误:[C:\blah\Connection.dll:连接

.ConnectionBase::.ctor] [HRESULT 0x80070002] - 系统找不到指定的文件。

它所引用的ConnectionBase 类就在Connection.dll 中,或者至少应该是这样,因为该类是在Connection 命名空间/项目中定义的。 Connection 在其构建选项中选中了“允许不安全代码”。 ConnectionBase 中可能引用的构造函数被标记为internal

编辑:我尝试在使用带有不安全代码的 DLL 的 Web 服务项目中检查“允许不安全代码”。我还尝试将compilerOptions="/unsafe" 添加到system.codedom > 编译器> 编译器节点中的Web 服务的Web.config 文件中。但是,当我运行 Web 服务时,我仍然会得到一个包含以下内容的页面:

无法加载文件或程序集“连接”或其依赖项之一。试图加载格式不正确的程序。

【问题讨论】:

    标签: .net unmanaged ilmerge badimageformatexception peverify


    【解决方案1】:

    哦,伙计,这很烦人。这不是不安全的代码,不是我在 VS 项目中的 32/64 位目标平台设置,也不是 ILMerge。我必须在 IIS 7 的应用程序池上将启用 32 位应用程序设置设置为 True(我在 Windows 7 64 位)。重新启动应用程序池后,我的 Web 服务加载正常。感谢this blog 让我朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-31
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多