spring.net与OracleODP结合时发生的版本问题

在Visual Studio环境下使用Spring.Net与OracleODP集成时遇到版本冲突问题,表现为创建上下文失败,错误涉及Oracle.DataAccess.Client.OracleConnection类型的转换。尝试的解决方案包括:卸载ODP.net4并安装ODP.net20、使用GAC工具添加OracleDataAccess.dll到全局程序集缓存,以及将项目目标平台设置为x86。其中,GAC添加可能为关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初步学习在vs下搭建spring.net,dbprovider使用OracleODP方式


更多dbprovider名称可参照 http://www.springframework.net/docs/1.3.0/reference/html/dbprovider.html

当执行到 IApplicationContext ctx = ContextRegistry.GetContext();

出现如下异常:

System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Error creating context 'spring.root': Error thrown by a dependency of object 'OracleODP-11-2.0' defined in 'assembly [Spring.Data, Version=1.3.1.40711, Culture=neutral, PublicKeyToken=65e474d141e25e07], resource [Spring.Data.Common.dbproviders.xml] line 375' : Unsatisfied dependency expressed through constructor argument with index 2 of type [System.Type] : Could not convert constructor argument value [Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342] to required type [System.Type] : Cannot convert property value of type [System.String] to required type [System.Type] for property ''.

 while resolving 'constructor argument with name dbmetadata' to 'Spring.Data.Common.DbMetadata#3A0FBB9' defined in 'assembly [Spring.Data, Version=1.3.1.40711, Culture=neutral, PublicKeyToken=65e474d141e25e07], resource [Spring.Data.Common.dbproviders.xml] line 375' (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:

System.Configuration.ConfigurationErrorsException: Error creating context 'spring.root': Error thrown by a dependency of object 'OracleODP-11-2.0' defined in 'assembly [Spring.Data, Version=1.3.1.40711, Culture=neutral, PublicKeyToken=65e474d141e25e07], resource [Spring.Data.Common.dbproviders.xml] line 375' : Unsatisfied dependency expressed through constructor argument with index 2 of type [System.Type] : Could not convert constructor argument value [Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342] to required type [System.Type] : Cannot convert property value of type [System.String] to required type [System.Type] for property ''.

 while resolving 'constructor argument with name dbmetadata' to 'Spring.Data.Common.DbMetadata#3A0FBB9' defined in 'assembly [Spring.Data, Version=1.3.1.40711, Culture=neutral, PublicKeyToken=65e474d141e25...).


出现异常时环境配置情况,安装oracle 11g32位客户端,安装ODAC112040 32位中odp.net4,使用.net4


经过多次尝试,发现有如下解决方案,因多次尝试,环境变化情况不唯一,故只能做简单如下猜测:

1、卸载odp.net4,安装odp.net20

2、使用gacutil.exe添加OracleDataAccess.dll,注意存在于C:\Windows\assembly和C:\Windows\Microsoft.NET\assembly下的区别,猜测vs实际读取的并非项目bin路径下的Oracle.DataAccess.dll,而是上述两个路径中某一个。

3、设置项目属性——生成——目标平台x86


个人认为第2钟原因可能性较大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值