在VB.net中调用方法时出现InvalidCastException异常

时间:2014-03-04 00:03:34

标签: .net vb.net oracle

尝试调用方法时,我从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

1 个答案:

答案 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行的Ge​​tApplicationXmlDataSelectionFactory.cs)可能会提供更多信息。

修改 通过查看异常的其余部分,似乎错误源自您正在使用的IoC框架(MbUnit) - 它在反射中加载了错误版本的DataAccess DLL。