使用oracle.dataaccess.dll时出错

时间:2010-01-20 11:26:35

标签: .net windows oracle 64-bit odp.net

我有一个使用Oracle.DataAccess.dll与Oracle数据库通信的Web应用程序。 部署在32位Windows系统上的Web应用程序可以运行,但不能在Windows Server 2008 64位上运行。我安装了10204_vista_win2k8_x64_production_db包,从项目中引用了已安装的dll(版本2.102.4.0),但是我收到以下错误:

无法加载文件或程序集“Oracle.DataAccess,Version = 2.102.4.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”或其中一个依赖项。系统找不到指定的文件。

5 个答案:

答案 0 :(得分:12)

同样在这里。 Oracle.DataAccess程序集不以64位模式运行。

您应该将站点的应用程序池设置为32位模式(转到应用程序池的高级设置并将允许32位应用程序设置为“True”)< / p>

如果这不起作用,请确保您的Oracle目录(包含所有Oracle dll的目录)位于系统路径中。如果您忘记了这一点,则会因未找到Oracle.DataAccess而遇到同样的神秘错误。

修改

安装Oracle客户端可能是一个很大的痛苦。使用Oracle Instant Client比安装完整客户端要容易一些,所以这就是我通常所做的事情:

  1. 下载Oracle Instant Client
  2. 在c:\ oracle中解压缩存档(任何其他目录都可以)
  3. 以管理员
  4. 打开命令提示符
  5. 输入 cd \ oracle
  6. 输入配置odp.net20 myhome
  7. 右键单击“我的电脑”,“高级系统设置”,“环境变量”并将C:\ oracle目录添加到系统路径
  8. 将Oracle.DataAccess.dll文件从c:\ oracle \ odp.net \ bin \ 2.x复制到应用程序的bin文件夹
  9. (optonally)编辑你的c:\ oracle \ tnsnames.ora文件

答案 1 :(得分:4)

我将在Windows Server 2008 R2(64位操作系统)上为您提供答案。我给出的库应用程序套件是使用.net 3.5 x86和较旧的DLL库开发的,因为我从oracle安装了较新的x64客户端而被卡住了。

我发现以下内容: 从Oracle for Windows Server 2008安装最新的x64客户端。我相信这将是2.7.0客户端。选择安装时,请确保自定义并选择.NET库。 配置您的tnsnames文件并根据您的数据源测试您的tnsping。

接下来,如果您运行的是32位应用程序,请为32位安装相同版本的客户端。此外,请遵循相同的安装例程,并选择相同的家。

完成后,您会发现您拥有一个包含两个客户端目录(Client1和Client2)的应用/产品。

如果你导航到windows / assemblies目录,你会发现你有一个对Oracle.DataAccess.dll(x2)的引用,其中一个用于x86,一个用于AMD64。

现在,根据您是否有开发人员或者您自己在机器上进行开发,您可能会在这里确定,但是,如果他们使用较旧的驱动程序,那么您需要执行最后一步。

导航到app \ name \ product \ version \ client_1 \ odp.net \ publisher policy \ 2.x目录。这里包括两个策略文件。使用gacutil / i将Policy.2.111.Oracle.DataAccess.dll安装到GAC中。这会将旧版oracle ODP调用重定向到较新版本。因此,如果有人使用10g客户端开发,它现在将与11客户端一起使用。

如果您需要更多详细信息,或者需要解决其他问题,例如在.net程序集上打开或关闭32位模式,请给我发电子邮件。

J班克斯 jbanks27@hotmail.com

祝你好运。

答案 2 :(得分:2)

如果您无法使用32位oracle客户端并安装64位,则需要安装64位客户端,并从oracle客户端安装文件夹中获取odp.net下的oracle.dataaccess.dll文件。你必须使用这个DLL并交换对该文件的引用,而不是使用32位dll。(这是你可能对项目/解决方案有的)

如果你有不同的oracle客户端,那就不行了。所以你会得到这样的错误。 希望有所帮助。

见插图 Implementing Oracle.Web.dll, Oracle.DataAccess.dll 64-bit failed on Windows Server 2008 with IIS 7.5 32-bit disabled

答案 3 :(得分:0)

如果您使用的是32位版本的Oracle.DataAccess.dll,则需要执行以下操作之一:

a)部署到32位服务器,或

b)将“启用32位应用程序”设置为“true”,部署到64位服务器。

如果您使用的是64位版本的Oracle.DataAccess.dll,那么您只需使用64位服务器。

问题是由Oracle引起的,因为它没有提供AnyCPU版本的Oracle.DataAccess.dll(可能是因为它有非托管/本机部分)

答案 4 :(得分:0)

如果您执行以下操作,一切正常 1.始终将所有dll设置为AnyCPU。 2.确保在将运行可执行文件的计算机上安装了相应版本的dll(即32位或64位,即与OS相同) 3.忽略编译器警告,即使用64/32位版本而不是MSIL版本

只要安装了适当版本的oracle dll,编译后的版本就可以在32位和64位上使用。