2011-09-27 37 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)。

相關問題