0

故事:我的网站在 System.Data.OraceClient 中运行(由于各种技术原因,我无法更改 dll)。现在,我有一个第三方 DLL 集成到我的网站,它是 32 位的。当我从 Visual Studio 运行时,一切运行良好,但是当我将其发布到 IIS 时,它会引发上述错误。

现在的解决方案是: 在 IIS 应用程序池中启用 32 位

启用 32 位后,第三方 DLL 将开始工作,并且System.Data.Oracle client fails with BadImageFormat exception

在 IIS 应用程序池中禁用 32 位。

当 32 位被禁用System.Data.OracleClient时,将开始工作,第三方 DLL 将失败并出现以下错误。

由于以下错误,检索具有 CLSID {xxxxx} 的组件的 COM 类工厂失败:xxxxxx 类未注册

-- 该类已注册。这就是为什么它在启用 32 位时工作的原因。

现在,我的情况是一次只有一个 dll 可以工作。在应用程序池中启用 32 位时,是否有一种解决方法可以让我的 System.Data.OracleClient 运行,而无需尝试将我的整个应用程序迁移到 Oracle 数据访问?

4

2 回答 2

0

我在想实现这一点的唯一方法是将您的 Web 应用程序构建为 32 位,然后让它使用 32 位客户端。然后一切都是32位的。确保您的 Web 应用程序是为 x86 构建的不要构建为 AnyCpu,因为这将默认为目标平台的 x64。

于 2017-05-19T09:32:41.240 回答
0

System.Data.OracleClient弃用多年,不应再使用。它仅适用于 x86(32 位),当时微软停止开发System.Data.OracleClient64 位 Windows 还不是很普遍。

最好使用 Oracle 的 ODP.NET 提供程序,它可用于 x86 和 x64。

还要检查这条指令:BadImageFormatException。这将在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时发生

于 2017-05-19T09:34:26.123 回答