HOWTO:Win7 x64上的Visual Studio 2010 MVC3项目使用Oracle ODP.NET 11.2

时间:2011-09-27 21:51:27

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

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

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

  

“无法加载文件或程序集'Oracle.DataAccess'或其中一个   依赖。尝试加载程序不正确   格式“

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

  

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

我完全失去了。

是否有人有类似的设置,可以分享详细的安装说明,详细说明如何以及如何在我的x64机箱上的IDE中调试Oracle.DataAccess,以及部署到x64服务器?

不应该这么困难。

3 个答案:

答案 0 :(得分:2)

我确实在Windows 7x64上运行了这个ODAC安装附带的Oracle 11g R2客户端:

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

确保您在本地安装了x64版本,并且可能必须执行uninstall-reboot-reinstall-reboot tango。我也有奇怪的问题让它看到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)。

答案 1 :(得分:2)

所以我终于明白了。以下是我一步一步做的事情:

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

      

    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,   Version = 4.112.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'   或其中一个依赖项。系统找不到指定的文件。"

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

      

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

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

  10. 更新的后续信息#1: 在我开始工作后,我试图将相同的步骤应用到另一台服务器,但它失败了。问题是"允许32位应用程序"在应用程序池中设置为TRUE。禁用32位应用程序(仅允许64位)解决了新计算机上的问题。

    更新了后续信息#2: 新计算机上的ODAC安装无法将安装和bin目录放在环境路径中(我讨厌Oracle)。一旦添加,所有内容都按照需要运行。

答案 2 :(得分:0)

我已经有很长一段时间没有使用过ODP.NET了,所以我正在记忆上次使用它时遇到的问题。

ODP.NET位必须安装在服务器上(或至少已部署,但我不确定如何实现这一点)。 ODP.NET中的实际客户端与用于Oracle访问的Java库相同。如果已安装,则使用底层Java库时会出现某种类型的配置错误或权限问题。

然而,我不确定IDE消息是什么。