尝试加载Oracle客户端库会引发BadImageFormatException

时间:2013-03-19 11:36:07

标签: .net wpf oracle

尝试从.net连接到oracle数据库时遇到以下异常:

Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.

在浏览了很多链接后,我试图通过将平台目标更改为任何CPU来克服此异常。因为它是wpf应用程序,在更改平台目标后,它会抛出以下异常:

'The invocation of the constructor on type 'SSC_GIP_UI.MainWindow' that matches the specified binding constraints threw an exception.' Line number '3' and line position '9'.

但它可以在平台目标x86上正常运行而不会引发上述异常,但它会抛出BadImageFormatException

我工作的环境是: Windows server 2008,
.net framework 4.0, oracle 11g(64位)

任何人都可以告诉我如何解决它?

3 个答案:

答案 0 :(得分:6)

此错误表示应用程序中的32位和64位组件之间存在不匹配。

当您在64位Windows中运行应用程序时,它可以以64位或32位运行。如果已将平台目标设置为x86,则它将以32位运行。如果您将平台目标设置为x64或AnyCpu,则它将以64位运行。

Oracle有不同版本的客户端,一个是32位,另一个是64位。因此,如果您的应用程序以32位模式运行,则需要确保安装了32位Oracle客户端。

答案 1 :(得分:5)

我想也许你必须: 打开IIS,找到此应用程序使用的应用程序池 转到该应用程序池,在“启用32位应用程序”中设置标记

答案 2 :(得分:0)

一个完全替代的解决方案是使用Oracle Data Provider for .NET,这将使您可以访问Oracle.ManagedDataAccess dll,无论您使用的是32位还是64位,它都能正常工作。请阅读this article from Oracle Magazine以获得温和的介绍。

你可以像使用System.Data.OracleClient一样使用它,虽然我不确定两者之间是否有功能奇偶校验,所以你的里程可能会有所不同。