8

我有一个使用 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' 或其依赖项之一。该系统找不到指定的文件。

4

5 回答 5

12

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

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

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

编辑

安装 Oracle 客户端可能会很痛苦。使用Oracle Instant Client比安装完整客户端要容易一些,所以我通常这样做:

  1. 下载Oracle 即时客户端
  2. 在 c:\oracle 中解压缩存档(任何其他目录都可以)
  3. 以管理员身份打开命令提示符
  4. 键入cd \oracle
  5. 键入配置 odp.net20 myhome
  6. 右击“我的电脑”、“高级系统设置”、“环境变量”,将C:\oracle目录添加到系统路径
  7. 将 Oracle.DataAccess.dll 文件从 c:\oracle\odp.net\bin\2.x 复制到应用程序的 bin 文件夹
  8. (可选)编辑您的 c:\oracle\tnsnames.ora 文件
于 2010-01-20T11:30:44.880 回答
4

我将根据我刚刚在 64 位操作系统 Windows Server 2008 R2 上所经历的情况为您提供答案。我得到的应用程序套件是使用 .net 3.5 x86 和较旧的 DLL 库开发的,我被卡住了,因为我从 oracle 安装了较新的 x64 客户端。

我发现如下:从 Oracle 为 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

祝你好运。

于 2010-02-23T23:43:00.153 回答
2

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

如果您有不同的 oracle 客户端,它将无法正常工作。所以你会得到这样的错误。希望有帮助。

请参阅在 禁用 IIS 7.5 32 位的 Windows Server 2008 上实现 Oracle.Web.dll、Oracle.DataAccess.dll 64 位失败的插图

于 2010-07-01T15:20:46.917 回答
0

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

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

于 2013-06-26T17:03:15.857 回答
0

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

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

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

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

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

于 2012-09-06T06:11:23.223 回答