尝试加载Oracle客户端库时引发了BadImageFormatException异常。

8
尝试从.NET连接到Oracle数据库时,遇到以下异常:
尝试加载Oracle客户端库时抛出BadImageFormatException。当在64位模式下安装了32位Oracle客户端组件时,会出现此问题。
在阅读了许多链接后,我尝试通过将平台目标更改为Any CPU来解决此异常。由于这是一个WPF应用程序,在更改平台目标后,它抛出以下异常:
与指定的绑定约束匹配的类型'SSC_GIP_UI.MainWindow'上的构造函数调用引发了异常。'行号'3'和行位置'9'
但是,如果使用x86平台目标,则可以正常运行而不会抛出上述异常,但会抛出BadImageFormatException。
我正在使用的环境是: Windows Server 2008, .NET Framework 4.0, Oracle 11g(64位)
有人能告诉我如何修复吗?
3个回答

6
这个错误表示您的应用程序中32位和64位组件不匹配。
在64位的Windows系统中运行应用程序时,它可能会以64位或32位方式运行。如果您将平台目标设置为x86,则它将以32位方式运行。如果您将平台目标设置为x64或AnyCpu,则它将以64位方式运行。
Oracle有不同版本的客户端,其中一个是32位,另一个是64位。因此,如果您的应用程序以32位模式运行,您需要确保安装了32位的Oracle客户端。

5

我认为你可能需要这样做: 打开IIS,找到此应用程序使用的应用程序池 进入该应用程序池,在“启用32位应用程序”中设置标记


谢谢。难怪我的程序在Web应用中不能正常工作,但在Win32应用中却能正常运行。 - Martin Lottering

1
完全替代方案是使用Oracle Data Provider for .NET,它将为您提供访问Oracle.ManagedDataAccess dll的权限,无论您是否在32位或64位上工作。 阅读来自Oracle Magazine的本文,以进行简单介绍。
您可以几乎与System.Data.OracleClient相同的方式使用它,尽管我不确定两者之间是否具有功能平等性,因此您的表现可能会有所不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接