我有一个引用 32 位 DLL 的 MVC 3 网站。操作系统是 Windows 2008 R2 x64。该网站位于 ASP.NET 4 应用程序池中。我已启用 Enable32Bit,但它不起作用。我收到 Bad Image Exception,但无法找到在 IIS 中启用此级别的日志记录的方法。我已设置一个页面,输出它是运行 32 位还是 64 位,当我在 AppPool 上打开/关闭 Enable32Bit 时,我会得到正确的输出。该网站也处于完全信任状态。
我不知道该如何尝试让它工作。但我知道它可以在 Win7 32 位上运行。
您能建议一些可以尝试的事情吗?
更新:我刚刚编写了一个简单的 Windows 窗体应用程序,上面有一个按钮,用于调用我的 DLL。它是针对 x86 构建的,运行良好,所以我认为 IIS 或 ASP.Net 存在问题。
更新2:ASP.Net Pipeline 是传统管道还是集成管道有关系吗?我都试过了,但问题是一样的,但我觉得值得一问
更新 3:我找到了这个问题尝试做同样的事情但他放弃了这没有什么帮助!!
答案1
这是一个老问题了,但您需要单击应用程序池,然后单击池的高级设置,并启用 32 位应用程序。如果没有这个,它将始终尝试加载 64 位,并且您会收到 32 位 dll 的坏图像错误。
答案2
如果出现 Bad Image 错误,则表示您的 32 位应用程序正在尝试加载 64 位 DLL。它会命名该 DLL 吗?(这似乎太明显了,不提一下不行吗?)
因此,您需要在该应用程序的或部分中找到引用 64 位 DLL 的任何位置,并确保通过在该行中添加 preCondition="bitness64" 来“屏蔽”该行免受 32 位应用程序池的影响。(也请检查以防万一)。
核心 .Net 内容(PageHandlerFactory/ASPNET ISAPI)通常首先设置正确,因此请关注其他模块/处理程序。
最坏的情况是,尝试在启动应用程序池时运行进程监视器,从那里识别 DLL,然后逆向寻找导致问题的原因。
享受!