2012-05-18 28 views
11

我最近在C#開始測試使用ODP.NET(Oracle.DataAccess 4.112.3)(4.0)的應用程序C#ODP.NET加載文件或程序

我設置這個項目針對任何平臺和發佈應用程序。

當我在客戶機上運行的程序,我收到:

Could not load file or assembly 'Oracle.DataAccess, Version=4.112.3.0,Culture=neutral, 
PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load 
a program with an incorrect format. 

就像我說的,我的目標「任何CPU」和我也嵌入應用程序的Oracle.DataAccess組裝。
我在安裝了Oracle客戶機的機器上以及沒有安裝Oracle的機器上出現此錯誤。

任何幫助表示讚賞。

+0

您已經在Oracle參考資料的屬性上將「Copy Local」更改爲True? – carny666

回答

18

就像我說的,我的目標 '任何CPU'

這可能是問題。

Oracle.DataAccess對於32bit64bit系統有不同的版本。如果您在32位計算機上開發,然後在64位操作系統上部署,則會收到此消息。

您可以通過將應用程序構建到x86目標並部署32位版本的數據訪問組件來輕鬆解決此問題。

+0

就是這樣,非常感謝您的快速幫助! – Wjdavis5

+1

對於Web應用程序,這意味着應用程序池必須運行32位,並且需要32位Oracle客戶端。當使用'4.112.3'時,64位web服務器和oracle客戶端的解決方案是什麼?本地複製是32位。繁榮。沒有它,客戶的GAC'd副本'4.112.2'被使用。繁榮。將64位新版本複製到bin中,說它的提供程序工廠缺少一個接口。它試圖再次使用舊的GAC_64版本嗎?或者是'web.config'中缺少的東西來告訴它在'bin'副本中使用新的提供者? –

+0

謝謝,這解決了我的問題。 :) – Pirate

0

您應該檢查Oracle.DataAccess程序集是否在您的機器上存在任何依賴關係,以及它在客戶機中是否缺失。

4

正如Reed Copsey所說,有兩個不同的DLL。當您定位ANYCpu時,您的應用程序將在64位計算機上以64位運行,在32位計算機上以32位運行。因此,如果您希望應用程序在32位或64位上以AnyCPU模式運行,則應將Oracle.DataAccess的引用更改爲特定版本= false,並複製local = false。當你部署到客戶端時,他們應該在他們的GAC中有oracle dll,它應該自動選擇正確的版本。

0

從調試的頂端更改選擇啓用調試X64任何CPU,雖然在內部CPU的任何點僅x64但是,這並不工作,嘗試將其更改爲64,它應該工作就像一個魅力

相關問題