2014-03-04 68 views
1

我在嘗試調用方法時從數據庫中獲取InvalidCastException。 有人可以幫我解決這個問題。謝謝。調用VB.net中的方法時出現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

通過查看的異常細節上唯一的,你可以看到你有一個版本不匹配。該代碼是試圖從不同版本的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'在上下文'Default'位置 'C:\ Windows \ Microsoft.Net \ assembly \ GAC_64 \ Oracle。數據訪問\ v4.0_4.112.3.0__89b483f429c47342 \ Oracle.DataAccess.dll」。 類型B源自上下文中的'Oracle.DataAccess,版本= 2.112.3.0, Culture = neutral,PublicKeyToken = 89b483f429c47342' '位置 '默認'C:\ Windows \ assembly \ GAC_64 \ Oracle.DataAccess \ 2.112 .3.0__89b483f429c47342 \ Oracle.DataAccess.dll」。 在

這兩個DataAccess.dll似乎來自全局程序集緩存,所以現在問題是爲什麼你的代碼引用兩個不同的版本。我假設發佈執行實際調用的代碼(第37行的Ge​​tApplicationXmlDataSelectionFactory.cs)可能會提供更多信息。

編輯: 通過查看異常的休息,似乎在錯誤的IoC框架來源於你正在使用(MbUnit的) - 它加載在反思錯誤版本的數據訪問DLL的。

+0

那麼,有什麼解決方法? – Aravin

相關問題