嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行


詳細分析:

使用C# 連接不同版本的Oracle.DataAccess

平時我們開發使用的是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。所以我開發出 來的程序,引用的也是這個版本的庫。

 

但是在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了。添加這個配置后便可正常運行

上述添加配置節點的方法,可以在取消特定版本的屬性之后避免。

 

 

開發環境:VS2008+64位ORACLE+64位oracleclient,64位WIN7 ,本地IIS調試程序的時候總是提示:嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現此問題。

將IIS連接程序池中項目所對應程序池的32位模式為false,就OK了。注意 生成項目的屬性,目標平台為任何cpu

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM