我有一个Web应用程序从asp.net 1.1(VS 2003)迁移到Asp.net 2(VS 2008)。 我在新版本上执行Oracle连接时遇到问题。开发环境是64位七。当使用所有CPU生成应用程序时,我在System.Data.OracleClient上遇到问题,异常System.BadImageFormatException:暂定de chargement d'un program de format不正确。 (例外de HRESULT:0x8007000B)。 。我在x86 CPU上生成,我在启动时出现此错误:
[BadImageFormatException:不可能充电器le fichier ou l'assembly'CpimWebApplication'ou une desesdépendances。试验 de chargement d'un program de format wrong。]
System.Reflection.Assembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint, StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection)+0
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, 证据集合安全,StackCrawlMark& stackMark,布尔 forIntrospection)+416
System.Reflection.Assembly.InternalLoad(String assemblyString, 证据集合安全,StackCrawlMark& stackMark,布尔 forIntrospection)+166 System.Reflection.Assembly.Load(String assemblyString)+35
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔starDirective)+190
问题是什么?机器上的Oracle客户端是32位版本。 我在网上看到,不可能使用32位oracle客户端的System.data.OracleClient?安装64位Oracle客户端是解决方案吗? TIA 问候
答案 0 :(得分:2)
如果以64位模式运行应用程序,则无法使用32位Oracle驱动程序。
您需要安装64位Oracle驱动程序并以64位模式运行应用程序,
或
将应用程序设置为以32位模式运行。您可以通过选择应用程序池在IIS中执行此操作,转到“高级”设置并将“启用32位应用程序”设置为true。
答案 1 :(得分:0)
GTG是对的。
但是,不推荐使用System.Data.OracleClient。微软不再支持它了。
因此,我建议您使用.Net的Oracle数据提供程序:ODP.Net。
您可以从以下网址下载:
Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (32-bit) Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)
对于开发(Win7 64位),请使用32位风格。我尝试过64位Oracle客户端但没有成功。 对于生产(Wind2008R2 64位),使用64位风味。 请注意,它们必须是相同的版本(11.2.1.0)。
另外,请确保为“Any CPU”编译应用程序,添加对Oracle.DataAccess的引用,将“Specific version”设置为“True”,将“Local copy”设置为“False”。通过这样做,当您将应用程序部署到生产环境时,它将从GAC中查找相同的版本(11.2.1.0,64位等效版本)。