IIS链接oracle提示:未能加载文件或程序集 System.Data.OracleClient 或 BadImageFormatException: 试图加载格式不正确的程序...

场景:
    系统:win8 64位
    oracle客户端:64位
    项目引用的System.Data.OracleClient.dll:32位
错误提示
    错误1: InvalidOperationException: 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
    错误2:未能加载文件或程序集 System.Data.OracleClient
配置方式:
    方式 1:网站应用程序池的基本设置:【.NET CLR 版本】选择 ,【托管管道模式】选择 ,在 高级设置中,【启用32位应用程序】设为True。此时报错: 错误1
    方式2:同方式1,唯一不同是【启用32位应用程序】设为False。此时报错: 错误2
错误原因:
     如果是方式1,此时应用程序以32位模式来运行, System.Data.OracleClient.dll可以正常加载,可以正常进入到登陆页面。但是一旦要连接数据库,应用程序会加载64位版本oracle客户端的oci.dll,而64位oci.dll无法在32位环境下运行。
    如果是方式2,此时应用程序以 64位模式来运行,那么一开始就会报无法加载 32位System.Data.OracleClient.dll,连应用程序启动都启动不起来。
解决方法: 要么全部用32位来启动,要么全部用64位来启动。
    如果要用64位,程序就引用一个64位的 System.Data.OracleClient.dll,并采用方式2的配置。
    因为项目原先就用了32位的 System.Data.OracleClient.dll,所以这里只能全部采用32位模式来启动
    0、先采用方式1的配置
    1、下载32位的oracle客户端:instantclient-basic-win32-11.2.0.1.0.zip,网上一大堆
    2、 假设这里解压到:D:\Oracle\instantclient-32(会看到此目录下有一个oci.dll)
    3、配置环境变量,在path中加上: D:\Oracle\instantclient-32(注意放置位置,建议放在最前面,优先从此目录寻找)
    4、iisreset,如果不执行此命令,会有缓存(之前的版本不对的oci.dll已经被加载到内存中了)。
    5、如果要配置TNS,直接在 D:\Oracle\instantclient-32新建目录:network\admin,然后copy一个tnsnames.ora来,   进行配置即可(可能要配置环境变量,但是我本地没配就能用)。







转载于:https://www.cnblogs.com/zwwhp/p/5457540.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值