.net 使用oracle.dataaccess.dll时出错

.net 使用oracle.dataaccess.dll时出错,.net,windows,oracle,64-bit,odp.net,.net,Windows,Oracle,64 Bit,Odp.net,我有一个web应用程序,它使用Oracle.DataAccess.dll与Oracle数据库通信。 部署在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

我有一个web应用程序,它使用Oracle.DataAccess.dll与Oracle数据库通信。 部署在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”或其依赖项之一。系统找不到指定的文件。

此处相同。Oracle.DataAccess程序集未在64位模式下运行

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

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

编辑

安装Oracle客户端可能是一个很大的难题。使用要比安装完整的客户端容易一些,因此我通常会这样做:

  • 下载
  • 在c:\oracle中解压归档文件(其他任何目录都可以)
  • 以管理员身份打开命令提示符
  • 键入cd\oracle
  • 键入配置odp.net20 myhome
  • 右键单击“我的电脑”、“高级系统设置”、“环境变量”,并将C:\oracle目录添加到系统路径
  • 将Oracle.DataAccess.dll文件从c:\Oracle\odp.net\bin\2.x复制到应用程序的bin文件夹中
  • (视觉上)编辑您的c:\oracle\tnsnames.ora文件

  • 我将从我刚刚在64位操作系统WindowsServer2008R2上所经历的事情中给出答案。我得到的库应用程序套件是使用.net 3.5 x86和旧的DLL库开发的,我被卡住了,因为我从oracle安装了新的x64客户端

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

    接下来,如果您运行的是32位应用程序,请为32位安装相同版本的客户端。此外,请按照相同的安装程序,选择相同的主页

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

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

    现在,取决于您是否有开发人员或者您自己正在机器上开发,这里您可能还可以,但是,如果他们使用的是较旧的驱动程序,那么您需要执行最后一步

    导航到app\name\product\version\client\u 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


    祝您好运。

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

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

    请参见上的插图

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

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

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

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


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

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


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

    我将Enable 32位应用程序设置为true,但运气不佳。我收到了相同的错误消息。我还能做什么?嗨,莱伯特,你说的“确保你的Oracle目录(包含所有Oracle DLL的目录)在你的系统路径中”到底是什么意思?我安装了ODAC 1020221,它将DLL安装到以下目录:e:\oracle\product\10.2.0\client\u 1\ODP.NET\bin\。奇怪的是,dll没有通过这次安装注册到GAC中,所以我通过其绝对路径从项目中显式引用了dll。不管怎样,我收到了我在上一篇文章中提到的同样的错误消息。我做错了什么。对于这样一个简单的更改,一组多么蹩脚的错误消息啊。打开32位应用程序为我解决了这个问题