尝试调用方法时,我从DB获取InvalidCastException。 有人可以帮我解决这个问题。谢谢。
例外:
Execute
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidCastException: [A]Oracle.DataAccess.Client.OracleCommand cannot be cast to [B]Oracle.DataAccess.Client.OracleCommand. Type A originates from 'Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_64\Oracle.DataAccess\v4.0_4.112.3.0__89b483f429c47342\Oracle.DataAccess.dll'. Type B originates from 'Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' in the context 'Default' at location 'C:\Windows\assembly\GAC_64\Oracle.DataAccess\2.112.3.0__89b483f429c47342\Oracle.DataAccess.dll'.
at .DAO.ApplicationDetailsBODataAccess.GetApplicationXmlDataSelectionFactory.ConstructSelectCommand(Database db, ApplicationDetailsBO applicationData) in C:\Projects\Source\\Development\Release19.0\Source\SharedSource\.DAO\ApplicationRepositoryArtifacts\GetApplicationXmlData\GetApplicationXmlDataSelectionFactory.cs:line 37
at Microsoft.Practices.Repository.Repository`1.Find[TIdentity](ISelectionFactory`1 selectionFactory, IDomainObjectsFactory`1 domainObjectFactory, TIdentity identity) in C:\Projects\Source\iCIS\Common\Source\RepositoryFactory\DataAccess Guidance Package\Microsoft.Practices.Repository\Repository.cs:line 97
at .DAO.ApplicationDetailsBODataAccess.ApplicationDetailsRepository.GetApplicationXmlData(ApplicationDetailsBO applicationData) in C:\Projects\Source\\Development\Release19.0\Source\SharedSource\.DAO\ApplicationRepositoryArtifacts\ApplicationDetailsRepositoryImplementation.cs:line 103
at .BWC.ApplicationBWC.GetApplication(ApplicationDetailsBO applicationData) in C:\Projects\Source\\Development\Release19.0\Source\SharedSource\.BWC\ApplicationBWC.vb:line 411
at .BWC.GatepostBWC.VerifyDemographicInfo(ApplicationDetailsBO applicationDetails) in C:\Projects\Source\\Development\Release19.0\Source\SharedSource\.BWC\GatepostBWC.vb:line 599
--- End of inner exception stack trace ---
at MbUnit.Framework.Reflection.Reflector.InvokeMethod(AccessModifier access, Object obj, String methodName, Boolean lookInBase, Object[] methodParams) in c:\RelEng\Projects\MbUnit v3.1\Work\src\MbUnit\MbUnit\Framework\Reflection\Reflector.cs:line 460
at MbUnit.Framework.Reflection.Reflector.InvokeMethod(AccessModifier access, Object obj, String methodName, Object[] methodParams) in c:\RelEng\Projects\MbUnit v3.1\Work\src\MbUnit\MbUnit\Framework\Reflection\Reflector.cs:line 443
at MbUnit.Framework.Reflection.Reflector.InvokeMethod(AccessModifier access, String methodName, Object[] methodParams) in c:\RelEng\Projects\MbUnit v3.1\Work\src\MbUnit\MbUnit\Framework\Reflection\Reflector.cs:line 197
at .BWC.Tests.GatepostBWCTest.verifyDemographicInfoTest() in C:\Projects\Source\\Development\Release19.0\Source\SharedSource\.BWC.Tests\GatepostBWCTest.vb:line 373
答案 0 :(得分:1)
通过仅查看异常详细信息的顶部,您可以注意到版本不匹配。代码试图从不同版本的DataAccess.dll转换相同类型(OracleCommand):2.112.3.0 vs 4.112.3.0:
[A] Oracle.DataAccess.Client.OracleCommand无法强制转换为 [B] Oracle.DataAccess.Client.OracleCommand。 A型起源于 'Oracle.DataAccess,Version = 4.112.3.0,Culture = neutral, PublicKeyToken = 89b483f429c47342'在上下文'默认'位置 'C:\ WINDOWS \ Microsoft.Net \装配\ GAC_64 \ Oracle.DataAccess \ v4.0_4.112.3.0__89b483f429c47342 \ Oracle.DataAccess.dll'。 类型B源自'Oracle.DataAccess,Version = 2.112.3.0, 在上下文中,Culture = neutral,PublicKeyToken = 89b483f429c47342' 位置处的“默认” 'C:\ WINDOWS \装配\ GAC_64 \ Oracle.DataAccess \ 2.112.3.0__89b483f429c47342 \ Oracle.DataAccess.dll'。 在
两个DataAccess.dll似乎都来自全局程序集缓存,所以现在问题是为什么你的代码引用了两个不同的版本。我假设发布执行实际调用的代码(第37行的GetApplicationXmlDataSelectionFactory.cs)可能会提供更多信息。
修改强> 通过查看异常的其余部分,似乎错误源自您正在使用的IoC框架(MbUnit) - 它在反射中加载了错误版本的DataAccess DLL。