System.InvalidCastException в модульном тесте с объектами Oracle с использованием DbProviderFactory

При использовании System.Data.Common.DbProviderFactory с этой ошибкой мы получаем эту ошибку при запуске нашего кода в тесте NUnit, но не при запуске обычного веб-приложения.

Ошибка

System.InvalidCastException: [A] Oracle.DataAccess.Client.OracleParameter не может быть преобразован в [B] Oracle.DataAccess.Client.OracleParameter. Тип A происходит от Oracle.DataAccess, Version = 2.112.1.2, Culture = нейтральный, 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 = нейтральный, 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.


person JDPeckham    schedule 06.02.2014    source источник


Ответы (1)


Оказывается, dll не копируется в исполняющую папку средства запуска тестов. К счастью, вы можете указать конкретную dll для загрузки из GAC.

Мы добавили это в app.config в проекте модульного тестирования. Обратите внимание на конкретную версию сборки в атрибуте type элемента <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>
person JDPeckham    schedule 06.02.2014