首页 文章

使用DbProviderFactory的Oracle对象的单元测试中的System.InvalidCastException

提问于
浏览
0

使用System.Data.Common.DbProviderFactory时,我们在NUnit测试中运行代码时会出现此错误,但在运行常规Web应用程序时则不会 .

Error

System.InvalidCastException:[A] Oracle.DataAccess.Client.OracleParameter无法强制转换为[B] Oracle.DataAccess.Client.OracleParameter . 类型A源自'Oracle.DataAccess,Version = 2.112.1.2,Culture = neutral,PublicKeyToken = 89b483f429c47342',位于'默认'位置'C:\ Windows \ assembly \ GAC_32 \ Oracle.DataAccess \ 2.112.1.2__89b483f429c47342 \ Oracle.DataAccess.dll” . 类型B源自'Oracle.DataAccess,Version = 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程序集,我们甚至尝试“使用特定版本”和“复制本地”,但它只是没有看到它继续从GAC中的较新版本加载DLL .

1 回答

  • 0

    事实证明,dll不会被复制到测试运行器的执行文件夹中 . 幸运的是,您可以指定加载GAC的特定dll .

    我们将其添加到单元测试项目中的app.config中 . Note <add /> 元素的type属性中的特定程序集版本

    <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>
    

相关问题