2

我有一个从 asp.net 1.1 (VS 2003) 迁移到 Asp.net 2 (VS 2008) 的 Web 应用程序。我在新版本上执行 Oracle 连接时遇到问题。开发环境是 64 位七。当生成具有所有 CPU 的应用程序时,我在 System.Data.OracleClient 上遇到问题,异常 System.BadImageFormatException: Tentative dechargement d'un program de format wrong. (HRESULT 异常:0x8007000B)。. 我在 x86 CPU 上生成,启动时出现此错误:

[BadImageFormatException: Impossible de Charger le fichier ou l'assembly 'CpimWebApplication' ou une de ses dépendances。Tentative dechargement 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, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +416
System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +166 System.Reflection.Assembly.Load(String assemblyString) +35
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔型 starDirective)+190

有什么问题 ?机器上的 Oracle 客户端是 32 位版本。我在网上读到不能将 System.data.OracleClient 与 32 位 oracle 客户端一起使用?安装 64 位 Oracle 客户端是解决方案吗?TIA 问候

4

2 回答 2

2

如果您在 64 位模式下运行应用程序,则不能使用 32 位 Oracle 驱动程序。

您需要安装 64 位 Oracle 驱动程序并以 64 位模式运行您的应用程序,

或者

将应用程序设置为以 32 位模式运行。您可以通过选择您的应用程序池在 IIS 中执行此操作,转到高级设置并将“启用 32 位应用程序”设置为 true。

于 2011-12-08T16:41:19.473 回答
0

GTG 是对的。

但是,不推荐使用 System.Data.OracleClient。微软不再支持它了。

因此,我建议您使用 Oracle Data Provider for .Net:ODP.Net。

您可以从以下位置下载它:

适用于 Microsoft Windows(32 位)的 Oracle Database 11g 第 2 版客户端 (11.2.0.1.0) 适用于 Microsoft Windows (x64) 的 Oracle Database 11g 第 2 版客户端 (11.2.0.1.0)

对于开发(Win7 64 位),请使用 32 位版本。我尝试了 64 位 Oracle 客户端,但没有成功。对于生产(Wind2008R2 64 位),请使用 64 位版本。请注意,它们必须是相同的版本 (11.2.1.0)。

此外,请确保为“任何 CPU”编译您的应用程序,添加对 Oracle.DataAccess 的引用,将“特定版本”设置为“True”,将“本地副本”设置为“False”。通过这样做,当您将应用程序部署到生产环境时,它将从 GAC 中查找相同的版本(11.2.1.0,64 位等效版本)。

于 2011-12-16T21:44:48.473 回答