2015-02-05 163 views
0

我一直在嘗試使用Oracle.DataAcces.dll部署Web應用程序。 Web服務器安裝了64位Oracle客戶端,我使用32位,因爲Visual Studio需要它。 將應用程序部署到服務器時,出現以下錯誤。 異常詳細信息:System.BadImageFormatException:無法加載文件或程序集「Oracle.DataAccess」或其某個依賴項。試圖加載格式不正確的程序。將Visual Studio Web應用程序部署到使用Oracle.DataAcces.dll的IIS

經過研究,我決定在Visual Studio中將Oracle.DataAcces.dll引用設置爲Copy Local = false。這樣,32位Oracle.DataAcces.dll就不會在Web應用程序的bin文件夾中結束,並且Web應用程序會在服務器上使用64位版本。我的平臺目標被設置爲任何CPU。

但是,這導致了相同的錯誤。所以如果有人知道答案,請幫助...我不明白髮生了什麼事。

回答

0

我設置Oracle.DataAcces.dll引用複製本地=假 和

<Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" /> 

改變* .csproj的文件引用

<Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL"> 

問題解決了。

0

假設您正在使用64位Windows「AnyCPU」,則意味着您的應用程序將以64位模式運行 - 即使是用於調試,無論您的Visual Studio是否爲32位應用程序。

這也需要一個Oracle客戶端和64位版本的ODP.NET提供程序。

這就是您參考<Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" />不起作用的原因,它強制加載32位ODP.NET。

您可以編寫參考簡稱爲

<Reference Include="Oracle.DataAccess" > 
    <SpecificVersion>False</SpecificVersion> 
    <Private>False</Private> 
</Reference> 

<Private>False</Private>映射到Copy Local=false在Visual Studio GUI。

無論您編譯爲「x86」,「x64」還是「AnyCPU」,使用此引用都應該適用於本地計算機和目標服務器。您甚至可以將.NET Framework更改爲其他版本,例如。 .NET Framework 2.0,而不會對代碼做任何更改。所有這些工作都提供了相應的Oracle客戶端和ODP.NET,即架構(32位與64位)必須匹配,並且ODP.NET(1.x或2.0或4.0)的主要版本必須與.NET Framework主要版本匹配。

+0

謝謝Wernfried ...我會嘗試你的建議。 – wheatie 2015-02-06 17:23:12

相關問題