2011-09-27 64 views
1

我有一台新的开发机器Windows 7 x64,正在编写一个面向Oracle数据库的MVC3应用程序。我尝试了所有我知道的事情,以使它无法成功运行。HOWTO:Win7 x64上的Visual Studio 2010 MVC3项目使用Oracle ODP.NET 11.2

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

"Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format"

在我的新的x64机器,我可以生成项目,但是当我试图在通过IDE我得到运行它:

"The provider is not compatible with the version of Oracle client"

我在一个完全丧失。

有没有人有类似的安装程序,可以共享有关安装位置以及如何引用Oracle.DataAccess的详细说明,以便我可以在我的x64机箱的IDE中进行调试,还可以将其部署到x64服务器?

它不应该这么难。

回答

2

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

  1. 在我X64 Win7的开发机器我删除了所有Oracle产品,企图从头开始(包括手动删除注册表项和文件/文件夹)
  2. 我安装“Oracle数据库11g第2版客户端(11.2.0.1.0)适用于Microsoft Windows(64位)” ON BOTH dev的机器和生产IIS服务器
    • 我选定了安装
    • 运行选项
    • 在我第一次尝试安装抱怨没有足够的空间在PATH 环境变量,所以我不得不取消安装,删除了一些路径值(在安装完成后
    • 我安装到C被替代:\ ORACLE是我的基本路径和client_x64是我的HOME所以它安装到C:\ ORACLE \产品\ 11.2.0 \ client_x64
  3. 我然后安装“64位ODAC 11.2第3版(11.2.0.2.1)对于Windows x64“两个 dev和生产机器。

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

    • 上面的语句创建一个新的家名叫odac112x64
  4. 在这一点上我建了一个简单的控制台应用程序中使用以下设置
    • 新增参考Oracle.DataAccess.dll位于在C:\ oracle \ odac11.2.x64 \ odp.net \ bin \ 4中
    • 设置CopyLocal = FALSE为Oracle.DataAccess引用
    • 设置为打造“任何处理器”
    • 该应用程序连接到我的Oracle数据库应用程序和返回的记录在两台机器上
  5. 然后我创建了一个样本MVC的网站项目,相同的连接代码作为控制台应用程序。
  6. 当我在IDE中本地运行它扔了一个错误:

    "Could not load file or assembly 'Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified."

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

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

  9. 当我重新运行的MVC网站安装项目在本地按预期工作!

已更新的后续资料#1: 得到这个工作,我尝试同样的步骤也适用于其他服务器,但失败之后。问题是“允许32位应用程序”在应用程序池中设置为TRUE。禁用32位应用程序(仅允许64位)解决了新机器上的问题。

已更新的后续资料#2: 在新机器上的ODAC安装失败放置在环境路径(我讨厌Oracle)的安装和bin目录。一旦添加完毕,所有内容都按需要运行。

+0

有趣的是,x32版本最终在VS的x64开发机器上工作得最好。这与我上面提到的类似。 – WCRC

0

我还没有使用ODP.NET很长一段时间,所以我从内存中解决了我上次使用它时遇到的问题。

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

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

2

我确实有这个与自带的ODAC安装在这里的Oracle 11g R2客户端在Windows 7x64运行:

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

请确保您有x64版本本地安装,你可能要执行uninstall-reboot-reinstall-reboot tango。我也有奇怪的问题,让它看到TNSNAMES条目,并不得不与EZCONNECT字符串,但这不是你的问题。

其实,我也得到它使用32位EF测试x工作和正常工作:

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

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

我不必做任何特别的事情,而且我不必做任何事情服务器端的特殊功能(包括10g和11gR2)。

相关问题