2014-02-06 24 views
0

當使用System.Data.Common.DbProviderFactory時,我們在NUnit測試中運行代碼時遇到此錯誤,但運行常規Web應用程序時沒有。單元測試中的System.InvalidCastException使用DbProviderFactory的Oracle對象

錯誤

System.InvalidCastException: [A] Oracle.DataAccess.Client.OracleParameter不能轉換到 [B] Oracle.DataAccess.Client.OracleParameter。在位置 'C:\ Windows \ assembly \ GAC_32 \ Oracle.DataAccess \ 2.112'的上下文'Default'中,類型A源自 'Oracle.DataAccess,Version = 2.112.1.2,Culture = neutral, PublicKeyToken = 89b483f429c47342'。 1.2__89b483f429c47342 \ Oracle.DataAccess.dll」。 類型B源自上下文中的'Oracle.DataAccess,版本= 4.112.1.2, Culture = neutral,PublicKeyToken = 89b483f429c47342' '位置 '默認'C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ Oracle .DataAccess \ v4.0_4.112.1.2__89b483f429c47342 \ Oracle.DataAccess.dll」。

我們有單元測試項目引用的2.112.1.2程序集,我們甚至嘗試過'使用特定版本'和'複製本地',但它只是沒有看到它繼續從新版本加載的DLL在GAC中。

回答

0

原來,該dll不會被複制到測試運行器的執行文件夾。幸運的是,您可以指定特定的dll從GAC中加載出來。

我們將此添加到單元測試項目中的app.config中。 注意<add />元素的類型屬性中的特定程序集版本

<system.data> 
    <DbProviderFactories> 
     <clear /> 
     <add name="Oracle Data Provider" invariant="Oracle.DataAccess.Client" 
      description=".Net Framework Data Provider for Oracle" 
      type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
</system.data>