C#用Oracle.DataAccess中鏈接Oracle要注意版本問題!轉)

通常人,不包括所有平時在開發中使用的都是32位的PC機,因此安裝的也是Oracle32位的客戶端。可是通常服務器都是64位的,安裝的也是 64位的Oracle客戶端,若是要部署使用Oracle.DataAccess鏈接Oracle的應用程序時,可能會遇到版本上的問題。那具體來講表如今如下兩個方面:
主要版本問題有兩種,一種是32位版和64位版的問題,若是咱們開發出來的應用是32位的,那麼就必須使用32位的客戶端,若是是64位的應用程序固然對應64位的客戶端。這裏須要注意:在64位的環境中使用VS開發Web程序,其運行的Web服務「WebDev.WebServer.exe」是32位的,因此若是要調試64位的Oracle鏈接程序,最好是部署到iis中,使用IIS來鏈接Oracle數據庫。
另外一個版本問題是Oracle.DataAccess的版本號問題,個人本機就是32位的XP,安裝了Oracle11gR2客戶端後,在安裝目錄下的 ODP.NET\bin\2.x目錄中能夠找到Oracle.DataAccess.dll文件,能夠看到其版本號是:2.112.1.2。因此我開發出來的程序,引用的也是這個版本的庫。 web

可是在64位下的Oracle.DataAccess.dll卻不同,安裝後的版本是2.112.1.0,如圖是Windows2008X64上的Oracle.DataAccess.dll。 數據庫

如今把開發環境的程序發佈部署到服務器上,就會拋出異常
未能加載文件或程序集「Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342」或它的某一個依賴項。
或者是
Could not load file or assembly 'Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format之類的話。
總之就是找不到對應的程序集。顯然,這裏系統找的是2.112.1.2版本的Oracle.DataAccess,而服務器上只有2.112.1.0版本的,因此才報錯,解決辦法就是在web.config中修改,在configSections節點結束以後增長以下內容:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess"
publicKeyToken= "89B483F429C47342"
culture= "neutral" />
<bindingRedirect
oldVersion= "2.112.1.2"
newVersion= "2.112.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
這樣就可讓IIS調用2.112.1.0的Oracle.DataAccess了。添加這個配置後即可正常運行。服務器

相關文章
相關標籤/搜索