使用oracle.dataaccess.dll时出错

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

Solutions Collecting From Web of "使用oracle.dataaccess.dll时出错"

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

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

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

编辑

安装Oracle客户端可能是一大痛苦。 使用Oracle即时客户端比安装完整的客户端要容易一些,所以我通常这样做:

  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. (optonally)编辑你的c:\ oracle \ tnsnames.ora文件

我将在Windows server 2008 R2(这是一个64位操作系统)上给出我刚才所做的答案。 我给出的库的应用程序套件是使用.net 3.5 x86和较旧的DLL库开发的,因为我已经从oracle安装了较新的x64客户端,所以我被卡住了。

我发现了以下内容:从Oracle for Windows server 2008安装最新的x64客户端。我相信这将是2.7.0客户端。 当您选择安装时,请确保您进行自定义并选择.NET库。 配置您的tnsnames文件并测试您的数据源的t </s>声。

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

当你完成后,你会发现你有一个单一的应用程序/产品与两个客户端目录(客户端1和客户端2)。

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

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

导航到应用程序\名称\产品\版本\ client_1 \ odp.net \发布者策略\ 2.x目录。 这里包含两个策略文件。 使用gacutil / i将Policy.2.111.Oracle.DataAccess.dll安装到GAC中。 这会将传统的Oracle ODP调用重定向到更新的版本。 因此,如果有人使用10g客户端开发,现在将与11客户端一起工作。

如果你需要进一步的细节,或需要其他问题的答案,如打开或关闭你的.NET程序集的32位模式,给我发电子邮件。

J银行jbanks27@hotmail.com

祝你好运。

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

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

请参见实施Oracle.Web.dll,Windows server 2008上的64位Oracle.DataAccess.dll失败,并禁用IIS 7.5 32位

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

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

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

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

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

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

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