Версия TLDR:
- Вместо этого используйте 12c 100% управляемого провайдера .
- Если вам необходимо использовать старого поставщика, вам нужно указать Oracle.DataAccess.dll на неуправляемые клиентские DLL-библиотеки правильной версии. Если на вашем компьютере установлено несколько клиентов Oracle, это может быть очень просто, например, включить в конфигурацию приложения переменную конфигурации «DllPath» (см. Ниже), но вам также может потребоваться установить новый клиент Oracle для указания.
Полная версия:
Во-первых, давайте удостоверимся, что мы понимаем компоненты старого неконтролируемого провайдера (а не нового 12с 100% управляемого провайдера). Он состоит из двух частей:
- управляемый компонент .net - Oracle.DataAccess.dll
- неуправляемый (не ..net) клиент
Проще говоря, Oracle.DataAccess.dll - это почти просто оболочка, переводящая инструкции .net в инструкции ORACLE-NET для неуправляемого клиента.
Тем не менее при загрузке Oracle.DataAccess существует порядок, в котором он пытается найти необходимые неуправляемые клиентские библиотеки. Из документации Oracle :
Oracle.DataAccess.dll ищет зависимые неуправляемые библиотеки DLL (например,
как клиент Oracle) в следующем порядке:
1.Каталог приложения или исполняемого файла.
2. Параметр DllPath, указанный в конфигурации приложения или web.config.
3.DllPath, указанный в machine.config.
4.DllPath параметр, указанный в реестре Windows.
HKEY_LOCAL_MACHINE \ Software \ Oracle \ ODP.NET \ версия \ DLLPath
5.Каталоги, указанные в переменной среды Windows PATH.
Итак, в вашем случае ваше приложение выполнило описанный выше процесс и обнаружило путь, в котором есть неизолированные dll, которые слишком стары по сравнению с используемой вами сборкой Oracle.DataAccess.dll.
Возможно, единственный установленный на этом компьютере клиент Oracle слишком устарел. Но это вступает в игру, если на компьютере установлено более одного клиента, и неуправляемые файлы были обнаружены первыми в другой, но более старой установке. Если позже, самое простое - использовать переменную конфигурации dllPath в вашей конфигурации и указать ее в правильной папке Oracle Home Bin:
<configuration>
<oracle.dataaccess.client>
<add key="DllPath" value="c:\oracle\product\1.1.0-xcopy-dep\BIN"/>
</oracle.dataaccess.client>
</configuration>
Если вы хотите установить новую копию клиента, xcopy версия является самой маленькой и содержит «мгновенный клиент» и указывает DllPath выше на это новое местоположение. Но любая установка клиента oracle будет работать.
Но если вы хотите избежать всего этого неуправляемого решения проблем с клиентом, посмотрите, можете ли вы обновить свое приложение, чтобы использовать вместо него 100% -ный управляемый поставщик - это действительно одна или две управляемые сборки, без какой-либо зависимости от неуправляемых файлов. 1052 *
Также возможно, что вы не загружаете Oracle.DataAccess.dll, как вы думаете, если он установлен как в каталоге bin, так и в вашем GAC, но я думаю, что это менее вероятный senario. См. процесс разрешения сборки для получения дополнительной информации.