无法在.NET中为Oracle.DataAccess加载文件或程序集

时间:2009-12-23 16:08:05

标签: .net oracle assemblies

当我尝试运行一个简单的程序来访问oracle时,我收到了这条消息

  

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

我检查了\ windows \ assembly并且它在那里,但它不在GAC(gacutil -l)中。我无法添加到GAC(gacutil -i [path]。我收到'未知错误'。

任何人都有同样的体验?

12 个答案:

答案 0 :(得分:23)

我将在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客户端一起使用。

仅供参考 - 有些人可能正在使用2.111.7.20安装最新的ODP.NET。主要的oracle客户端本身带有2.111.7.0 ..我在7.20上没有任何成功但是7.0客户端没有问题。

答案 1 :(得分:7)

我正在使用x64进行编译,只需使用x86即可解决问题

答案 2 :(得分:2)

正如第一个答案中所提到的,有32/64位场景为开发人员引入了构建和运行时陷阱。

解决方案始终是努力做到:您安装了哪种软件和操作系统

对于使用Oracle驱动程序和解决方案的一小部分方案,您可以访问此post

答案 3 :(得分:2)

我有同样的问题。

解决方案是将当前解决方案的平台更改为x64。

要在Visual Studio中执行此操作,请右键单击解决方案>配置管理器>主动解决方案平台。

答案 4 :(得分:2)

解决方案非常简单,只需要在服务器/工作站上定义与Visual Studio项目相关的内容。

首先检查您正在使用的Oracle库的版本,在您的情况下为2.111.7.20。接下来转到位于windows home-> assembly文件夹中的Windows GAC。

向下滚动到Oracle dll,通常称为Oracle.DataAccess或Oracle.Web。找到它的正确版本并记下它是否说x86或AMD64。

在visual studio中确保您的目标平台与GAC中的dll相同,因此如果它在GAC文件夹中显示x86,请确保目标平台是x64和其他x64。您可以在构建/平台目标下的Visual Studio项目属性中设置此项。

同时确保您的项目中的引用参考指向开发计算机上的完全相同的版本。

有了这一切,一切都会正常。

我通常首先检查服务器,因为在企业环境中更改本地依赖项的版本通常更容易,然后要求服务器管理员安装不同的dll。

答案 5 :(得分:1)

我切换到Oracle的托管ODP.NET程序集。我还必须清除使用旧程序集的IIS Web应用程序中的所有文件。现在,当我在IIS Express和IIS中进行调试时,我没有遇到有关32对64位版本的任何冲突。请参阅以下文章。

An Easy Drive to .NET

答案 6 :(得分:1)

在我的情况下,错误表明组合

Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342

缺失。

当我运行gacutil.exe /l 'Oracle.DataAccess'时,结果为:

The Global Assembly Cache contains the following assemblies:
Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86

Number of items = 1

此时我刚刚安装了oracle客户端:win32_11gR2_client

然后我安装了oracle开发人员工具ODTwithODAC112030_deleloper_tool

现在gacutil说:

The Global Assembly Cache contains the following assemblies:
Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86

Number of items = 2

修正了,一个完全缺失的装配案例

答案 7 :(得分:1)

尝试以下操作:在Visual Studio中,转到工具/选项....项目和解决方案... Web项目...确保已选中64位版本的IIS Express复选框。

答案 8 :(得分:0)

在.net项目中的

转到参考部分,右键单击Oracle.DataAccess dll,转到属性。

将设置更改为“Specific Version=False”。现在它将没有版本冲突

答案 9 :(得分:0)

几天来我遇到了同样的问题,然后我发现Oracle.DataAccess在项目的引用列表中可用,但是在bin文件夹中丢失了。因此我将其从引用列表中删除,然后再次读取。

答案 10 :(得分:0)

请向GAC注册您的Oracle.DataAccess

raProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll

答案 11 :(得分:0)

你可以关注这个

https://docs.oracle.com/health-sciences/inform-62/install/index.htm?toc.htm?214691.htm

注册 Oracle.DataAccess.dll 程序集 您必须将 Oracle.DataAccess.dll 程序集注册到 .NET 版本 2 和版本 4 的全局程序集缓存 (GAC):

  1. 以管理员身份打开命令提示符。

  2. 导航到 %ORACLE_CLIENT_HOME%\ODP.NET\bin\2.x。

  3. 执行以下命令:oraprovcfg.exe/action:gac/providerpath:Oracle.DataAccess.dll

  4. 导航到 %ORACLE_CLIENT_HOME%\ODP.NET\bin\4.x。

  5. 执行以下命令:oraprovcfg.exe/action:gac/providerpath:Oracle.DataAccess.dll