【问题标题】:HOWTO: Visual Studio 2010 MVC3 Project on Win7 x64 Using Oracle ODP.NET 11.2如何:使用 Oracle ODP.NET 11.2 在 Win7 x64 上的 Visual Studio 2010 MVC3 项目
【发布时间】:2011-09-27 21:51:26
【问题描述】:

我有一台新的开发机器 Windows 7 x64,并且正在编写一个针对 Oracle 数据库的 MVC3 应用程序。我已经尝试了所有我知道的方法来让它运行,但没有成功。

以前,我在 Win7 x32 机器上开发,可以在本地正常调试,但无法在 Win2008 x64 服务器上部署和运行它,尽管安装了 ODP.Net 和 11g 客户端。

“无法加载文件或程序集 'Oracle.DataAccess' 或其之一 依赖关系。试图加载一个不正确的程序 格式”

在我的新 x64 机器上,我可以构建项目,但是当我尝试通过 IDE 运行它时,我得到:

“提供者与Oracle客户端版本不兼容”

我完全不知所措。

有没有人有类似的设置,可以分享详细说明安装什么以及如何引用 Oracle.DataAccess,这样我就可以在我的 x64 机器上的 IDE 中调试,也可以部署到x64 服务器?

应该没那么难。

【问题讨论】:

    标签: asp.net asp.net-mvc visual-studio-2010 oracle odp.net


    【解决方案1】:

    我确实在 Windows 7x64 上使用 ODAC 安装随附的 Oracle 11g R2 客户端运行此程序:

    http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

    确保您在本地安装了 x64 版本,并且您可能需要执行卸载-重新启动-重新安装-重新启动探戈。我在查看 TNSNAMES 条目时也遇到了奇怪的问题,并且不得不使用 EZCONNECT 字符串,但这不是你的问题。

    事实上,我还使用 32 位 EF 测试版让它在 x64 上运行,并且运行良好:

    http://www.oracle.com/technetwork/topics/dotnet/downloads/oracleefbeta-302521.html

    虽然我认为 EF 实现尚未 100% 准备好迎接黄金时段(我们最终改用 DevArt 驱动程序,因为它对计算字段有更可靠的支持 - 我们从未在 ODP 中使用过计算或身份时间戳.NET EF Beta,虽然奇怪的是由触发器填充的主键 NUMBER 字段确实有效。)

    我不需要做任何特别的事情,我也不需要在服务器端做任何特别的事情(对于 10g 和 11gR2)。

    【讨论】:

      【解决方案2】:

      所以我终于想通了。这是我一步一步做的:

      1. 在我的 Win7 x64 开发机器上我删除了所有 Oracle 产品,试图从头开始(包括手动删除注册表项和文件/文件夹)
      2. 我在开发机器和生产 IIS 服务器上安装了“Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)” BOTH
        • 我为安装选择了 RUNTIME 选项
        • 在我第一次尝试安装时抱怨 PATH 中没有足够的空间 环境变量,所以我不得不取消安装,删除一些路径值(安装完成后被替换
        • 我安装到 C:\oracle 是我的基本路径,client_x64 是我的 HOME,所以它安装到 C:\oracle\product\11.2.0\client_x64
      3. 然后我在BOTH开发和生产机器上安装了“64-bit ODAC 11.2 Release 3 (11.2.0.2.1) for Windows x64”

        install.bat odp.net4 c:\oracle\odac11.2.x64 odac112x64

        • 以上语句创建了一个名为 odac112x64 的新家
      4. 此时我使用以下设置构建了一个简单的控制台应用程序
        • 添加了对位于 C:\oracle\odac11.2.x64\odp.net\bin\4 中的 Oracle.DataAccess.dll 的引用
        • 为 Oracle.DataAccess 引用设置 CopyLocal = FALSE
        • 设置应用程序为“ANY PROCESSOR”构建
        • 应用程序连接到我的 oracle 数据库并返回两台机器上的记录
      5. 然后,我使用与控制台应用程序相同的连接代码创建了一个示例 MVC 网站项目。
      6. 当我在 IDE 中本地运行它时,它抛出了一个错误:

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

        • 我相信这是因为 IDE 是 32 位的,无法加载 64 位的 Oracle.DataAccess
      7. 我将准确的代码发布到生产服务器并且它运行成功
        • 此时我唯一的问题是让它在本地运行以用于开发目的
      8. 我安装了“ODAC 11.2 Release 3 (11.2.0.2.1) with Xcopy Deployment”,它是 ODP.NET 的 x32 版本

        install.bat odp.net4 c:\oracle\odac11.2.x32 odac112x32

      9. 当我在本地重新运行 MVC 网站项目时,它按预期工作!

      更新的后续信息 #1: 让它工作后,我尝试将相同的步骤应用于另一台服务器,但它失败了。问题是应用程序池中的“允许 32 位应用程序”设置为 TRUE。禁用 32 位应用程序(仅允许 64 位)解决了新机器上的问题。

      更新的后续信息 #2: 新机上ODAC安装未能将安装和bin目录放在环境路径下(我讨厌Oracle)。添加后,一切都按预期运行。

      【讨论】:

      • 有趣的是,x32 版本最终在带有 VS 的 x64 开发机器上运行得最好。这与我上面提到的体验相似。
      【解决方案3】:

      我已经有一段时间没有使用 ODP.NET,所以我一直在回忆上次使用它时遇到的问题。

      ODP.NET 位必须安装在服务器上(或至少已部署,尽管我不确定这是如何立即完成的)。 ODP.NET 中的实际客户端与用于 Oracle 访问的 Java 库相同。如果已安装,那么您在使用底层 Java 库时会遇到某种类型的配置错误或权限问题。

      不过,我不确定 IDE 消息是关于什么的。

      【讨论】:

        猜你喜欢
        • 2015-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多