2013-01-30 4 views
1

У меня есть версия Oracle.DataAccess 2.112.1.0, упомянутая в моем проекте. Всякий раз, когда я запускаю проект, я получаю сообщение об ошибке. Не удалось загрузить сборку. Я проверил записи, сделанные в файле .csproj для ссылочной DLL, и обнаружил, что ссылочной dll была Oracle.DataAccess 2.111.7.0. Я уверен, что ссылочная dll - это Oracle.DataAccess2.112.1.0, но не уверен, почему запись, сделанная в файле проекта, отличается. Любые указатели на это были бы полезны, поскольку эта проблема удерживала меня надолго.Проблемы с Oracle.DataAccess 2.112.1.0 в .NET4.0 VS2010

+0

попробуйте сначала удалить ссылку, затем добавить ее обратно (с помощью просмотра). – tbone

+0

много пробовал, но запись файла проекта все равно не меняется. Я попытался отредактировать файл проекта с помощью блокнота. Но все равно получайте ту же ошибку. –

+0

местоположение и версия DLL можно найти в свойствах (в разделе «Ссылки» щелкните правой кнопкой мыши по Oracle.DataAccess и выберите «Свойства»). – tbone

ответ

1

Я нашел ту же проблему, когда клиент использовал 2.112.1.0 в своих ссылках, но он продолжал ссылаться на локальную машину 2.112.3.0.

Причина в том, что при установке в GAC он вставляет файл политики - запись конфигурации уровня GAC для перенаправления вашей DLL на свою новую версию. Даже если у вас есть файл в том же каталоге, .NET 2+ проверит GAC на наличие каких-либо политик, прежде чем разрешить вашему приложению самостоятельно разрешать сборку.

Что-то, что я пытался, было перенаправление вручную в файле App/Web.config, но я обнаружил, что это не работает для меня, что подробно описано в разделе Redirecting Assembly Versions.

Как только это будет сделано, вы можете столкнуться с данной проблемой:

  • BadImageFormatException - Image is not of correct format (или что-то подобное)

и/или

  • Version mismatch - The major/minor version does not match (или нечто подобное)

T hese errors указывают на то, что, хотя ваша более старая сборка теперь используется, сборки COM не ссылаются на нее. Мое исследование показало, что сборки Oracle ODP.NET хранят свои COM-версии DLL, жестко закодированные внутри.

Единственное решение, которое сделал для меня, было

  1. Un-GAC 2.112.X.0, что ваше приложение было автоматически реферирование.
  2. Скопируйте версию конкретных COM DLL, в другую папку (например, \ LIB)
  3. Скопируйте их в сборку, как вы строите

Если все это не удается, я бы рекомендовал полностью удалить Oracle ODP. NET, удалив каталог Oracle вручную, а затем после перезагрузки, установив старую DLL из MSI напрямую. Кажется, что Oracle хранит всю историю драйверов онлайн по адресу Oracle's website.

Удачи вам!