2017-02-10 109 views
0

我遇到了我们在这里的服务问题。Oracle.DataAccess出错

我有这个错误:

System.IO.FileNotFoundException : Could not load file or assembly 'Oracle.DataAccess, Version=4.112.4.0, Culture=neutral, PublicKeyToken=X' or one of its dependencies.' 

所以,我猜我会在我的项目的bin文件夹添加DLL的,没什么太大了吧?

然后,我有这样的错误:

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

好吧,我以前见过这个,只要到应用程序池,并设置了“启用32位应用程序”为true ....对吗?

OpenDBConnection: Error occurred. System.TypeInitializationException: 
The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. 
---> Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client 

好吧...没问题,让我检查一下:服务器是2008 R2企业版x64。然后我会编译成x64。

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

现在,这个烂摊子已经持续了几天。我生气了,因为我明显在转圈,但无法确定出口的位置。

我安装了Oracle 1120_32和1120_64(这是11.2.0.2.0版本),安装了.NET 4.0。 我试过编译“任何CPU”。 我试过将dll属性设置为“Specific version = false”,“Copy Local = true”,以及相反。 我已经试过了让程序的旧版本,并在代码中进行所需的更改后重新编译它们,保留旧的配置。 我试着绕着一个仙人掌唱歌,“请大条例草案,让这个DLL加载”。

我检查了很多链接,但是这发生在远程环境中,所以我没有选择设置断点或任何可以看到的程序试图加载的任何dll,并且大多数链接建议(re )在服务器上安装oracle客户端,但是因为我不得不向管理员询问这个问题,所以我宁愿确认那里没有最后的尝试。

有人可以帮忙吗?

+0

您是如何安装32位和64位Oracle客户端的?看看这个指令:http://stackoverflow.com/questions/24104210/badimageformatexception-this-will-occur-when-running-in-64-bit-mode-with-the-32#24120100,resp。 http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client#25412992 –

+0

@WernfriedDomscheit以及我不是服务器管理员,所以我没有没有安装任何东西:)正如在帖子中所说,我已经看到帖子说重新安装'可能'做的伎俩,但我希望其他东西... – DoctorPrisme

+0

听起来很奇怪,但我有一些类似的东西回来与我相信VS2013。解决方法是删除(删除)VS中的引用,然后将其添加回去(32位odac)。 – tbone

回答

0

如果应用程序池启用了32位,那么oracle客户端和应用程序也需要为32位。

我认为管理的ODAC不会那么痛苦。

如果你想要去的64位,确保一切是64位(应用程序,应用程序池和ODAC)

此外,Windows Sysinternals的进程监视器可能是有用的,以确定哪些非托管的DLL正在由加载您的应用使用Oracle.DataAccess.dll。

+0

我不知道你是什么意思的托管ODAC 我同时安装了oracle客户端32和oracle客户端64,我的问题是真的“如何强制程序加载这个特定的DLL“,因为它似乎尝试使用旧的。 谢谢 – DoctorPrisme

+0

托管的odac是一个不同的下载请参见[链接](http://www.oracle.com/technetwork/database/windows/下载/ utilsoft-087491.html),它并不需要安装所有的非托管客户端DLL,未安装的odac使用注册表项和环境路径和变量来确定要使用哪个客户端 –

+0

BadImageFormatException:无法加载文件或程序集'NameOfYourAppHere '或它的一个依赖关系,试图加载格式不正确的程序 这意味着有一个应用程序池和应用程序或应用程序与Oracle.DataAccess.dll之间的位差不匹配。 如果应用程序池已启用32位应用程序,则该应用程序将在x64或oracle.dataaccess.dll中编译为x64。或者如果App Pool没有启用32位应用程序,则在x86或oracle.dataaccess.dll中编译的应用程序为x86(应用程序池不支持x86) –

相关问题