我有一个使用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”或其中一个依赖项。系统找不到指定的文件。
答案 0 :(得分:12)
同样在这里。 Oracle.DataAccess程序集不以64位模式运行。
您应该将站点的应用程序池设置为32位模式(转到应用程序池的高级设置并将允许32位应用程序设置为“True”)< / p>
如果这不起作用,请确保您的Oracle目录(包含所有Oracle dll的目录)位于系统路径中。如果您忘记了这一点,则会因未找到Oracle.DataAccess而遇到同样的神秘错误。
修改强>:
安装Oracle客户端可能是一个很大的痛苦。使用Oracle Instant Client比安装完整客户端要容易一些,所以这就是我通常所做的事情:
答案 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客户端,那就不行了。所以你会得到这样的错误。 希望有所帮助。
答案 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位上使用。