将Visual Studio Web应用程序部署到使用Oracle.DataAcces.dll的IIS

问题描述:

我一直在尝试使用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。

但是,这导致了相同的错误。所以如果有人知道答案,请帮助...我不明白发生了什么事。

我设置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"> 

问题解决了。

假设您正在使用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