一種是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.netbin2.x目錄中可以找到oracle.dataaccess.dll檔案,可以看到其版本號碼是:2.112.1.2。所以我開發出來的程式,引用的也是這個版本的庫。
但是在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了。添加這個配置後便可正常運行。