初步学习在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钟原因可能性较大