2013-02-01 48 views
6

我安裝了用於Visual Studio 2012的odp.net 32​​位安裝。我設置了對Oracle.DataAccess.dll的引用,並且我與Oracle的連接似乎正在工作。Oracle.DataAccess不匹配錯誤

當我生成項目(.net 4)時出現以下錯誤。該項目設置爲構建AnyCPU(我的工作站爲64位,最終部署到32位的服務器)

'正在構建的項目「MSIL」的處理器體系結構與處理器體系結構之間存在不匹配參考Oracle.DataAcess,版本4.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342,processorArchitecture = x86,「x86」。這種不匹配可能會導致運行時失敗。請考慮通過配置管理器更改項目的目標處理器體系結構,以便對齊項目和參考文獻之間的處理器體系結構,或者使用與您的項目的目標處理器體系結構相匹配的處理器體系結構來參考參考文獻'

這只是一個vs.net的警告,但有沒有什麼辦法擺脫這一點?

回答

14

就像你說的,這只是一個警告。因爲ODP.net不是「AnyCPU」,所以警告表明您有一個依賴性,不適合您的應用程序所在的主機操作系統。只要你的odp.net安裝與位相匹配,你就可以。但是編譯器無法做出這個決定,並且正試圖給你一個提醒。

我發現在這其中包括一個可能的變化(我假設到該凸出文件)一個connect article禁用錯誤:

<PropertyGroup> 
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch> 
</PropertyGroup> 

在任何情況下,你的「AnyCPU」應用程序將運行良好只要您在服務器上安裝的32位odp.net與您引用的64位odp.net(或者發佈者策略已正確安裝以重定向到更高版本)的版本相同即可。爲了消除任何混淆,我通常將「複製本地」設置爲「false」。換句話說,我針對特定版本的dll進行編譯,但讓它針對GAC解決的問題運行(其中包括大多數odp.net安裝包含的發佈者策略)。

您還可以在您的開發機器上安裝32位odp.net(理想情況下是同一版本),以便運行/調試32位應用程序或使用「用於Visual Studio的Oracle開發工具」的集成工具「在Visual Studio裏面。

所有這一切說,這裏有超過滿足的眼睛。如果你的應用程序實際上正在運行(這意味着「它只是一個警告」),如64位,而不是使用你的32位安裝。我猜你的機器已經安裝了64位版本(多個oracle家園)。

0

This is only a vs.net warning however is there any way to get rid of this?

我相信有沒有辦法擺脫這一點,因爲你想部署在32位機器上,你創建的64位。這只是一個警告,告訴您駕駛員可能有問題。如果你現在正在做什麼,沒有什麼可擔心的。

您應該期待它 - 您在64位體系結構上使用32位庫。

0

另一種解決方案:

下載ODAC 11.2 Release 5 (11.2.0.3.20),並設置你的編譯器的x86。我100%確定它會清除所有與oracle有關的警告。 將命名空間設置爲:using System.Data.Odbc;

然後建立數據庫連接。