【问题标题】:Could not load file or assembly for Oracle.DataAccess in .NET无法在 .NET 中为 Oracle.DataAccess 加载文件或程序集
【发布时间】:2010-12-29 13:09:15
【问题描述】:

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

无法加载文件或程序集“Oracle.DataAccess, 版本=2.111.7.20,文化=中性,PublicKeyToken=89b483f429c47342' 或其依赖项之一。系统找不到指定的文件。

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

有人有同样的经历吗?

【问题讨论】:

  • 已解决。因为我用的是x64,所以用x86运行就可以解决问题
  • 您应该添加一个更完整的答案,然后将您的问题标记为您找到的解决方案已回答。

标签: .net oracle assemblies


【解决方案1】:

我将根据我刚刚在 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 客户端了。

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

【讨论】:

  • 非常感谢!这篇文章救了我!
【解决方案2】:

我是用x64编译的,用x86就可以解决问题

【讨论】:

  • 我希望你能提供更多信息。我遇到了这个问题,我被卡住了
  • 是的,您可以说这样做可以解决问题,但是在 x64 中编译并没有错,我想以这种方式运行它,现在我的计算机中有大量 Oracle.DataAccess.dll 和 oracle 客户端我能做的就是为 x86 编译。甲骨文正在做某事。错了。!!!
  • @mkb 我同意。不幸的是,甲骨文没有解决这个问题。
【解决方案3】:

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

解决方案总是尝试正确:您安装了什么样的软件和操作系统

有关 Oracle 驱动程序和解决方案的一小部分场景列表,您可以访问此post

【讨论】:

    【解决方案4】:

    在您的 .net 项目中转到参考部分,右键单击 Oracle.DataAccess dll,转到属性。

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

    【讨论】:

      【解决方案5】:

      我有同样的问题。

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

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

      【讨论】:

        【解决方案6】:

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

        An Easy Drive to .NET

        【讨论】:

          【解决方案7】:

          在我的情况下,错误表明程序集

          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
          

          已修复,一个完全缺失的组装案例

          【讨论】:

            【解决方案8】:

            解决方案非常简单,这完全取决于您如何在与您的 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 项目属性中的 build/platform 目标下进行设置。

            还要确保您在项目中的引用下的引用指向您的开发计算机上完全相同的版本。

            有了这个,一切都应该正常了。

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

                我几天都面临同样的问题,然后我发现 Oracle.DataAccess 在项目的引用列表中可用,但在 bin 文件夹中丢失了。所以我把它从引用列表中删除并再次阅读。

                【讨论】:

                  【解决方案11】:

                  请将您的 Oracle.DataAccess 注册到 GAC

                  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
                  

                  【讨论】:

                    【解决方案12】:

                    你可以关注这个

                    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

                    【讨论】:

                      猜你喜欢
                      • 2011-03-13
                      • 2012-01-29
                      • 2014-03-12
                      • 2013-02-23
                      • 1970-01-01
                      • 2014-06-27
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多