У меня есть версия 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
ответ
Я нашел ту же проблему, когда клиент использовал 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, жестко закодированные внутри.
Единственное решение, которое сделал для меня, было
- Un-GAC 2.112.X.0, что ваше приложение было автоматически реферирование.
- Скопируйте версию конкретных COM DLL, в другую папку (например, \ LIB)
- Скопируйте их в сборку, как вы строите
Если все это не удается, я бы рекомендовал полностью удалить Oracle ODP. NET, удалив каталог Oracle вручную, а затем после перезагрузки, установив старую DLL из MSI напрямую. Кажется, что Oracle хранит всю историю драйверов онлайн по адресу Oracle's website.
Удачи вам!
попробуйте сначала удалить ссылку, затем добавить ее обратно (с помощью просмотра). – tbone
много пробовал, но запись файла проекта все равно не меняется. Я попытался отредактировать файл проекта с помощью блокнота. Но все равно получайте ту же ошибку. –
местоположение и версия DLL можно найти в свойствах (в разделе «Ссылки» щелкните правой кнопкой мыши по Oracle.DataAccess и выберите «Свойства»). – tbone