Это старый, но все еще актуальный вопрос, и, хотя ответы здесь полезны, ни один ответ полностью не касался обоих вопросов OP.
1. Нужно ли мне устанавливать ODP.NET и клиент Oracle на компьютер, на котором я хочу запускать свое приложение?
ДА - если вы используете ODP.NET, неуправляемый. Это версия, которую вы обычно устанавливаете, когда выбираете «Oracle Data Provider for .NET» в установщике клиента Oracle (например). Вы загружаете это из Oracle (просто погуглите: URL-адреса Oracle часто меняются).
Но если вы используете ODP.NET, Managed (и вы, вероятно, захотите использовать это вместо этого), тогда нет, вам нужно только установить (или развернуть) ODP.NET, управляемый с помощью приложения, а не полный клиент Oracle. Подробнее см. Ниже.
2. Если да, есть ли другой способ, которым мне не нужно их устанавливать, но я все еще могу запустить свое приложение?
Да, есть хоть один способ. И это Управляемый порт ODP.NET.
К сожалению, обычные обходные пути, включая ODBC, Microsoft Oracle Provider for .NET (да, тот старый, устаревший) и ODP.NET, Unmanaged DLL, требуют установки клиента Oracle. Так продолжалось до тех пор, пока наши друзья из Oracle не предоставили нам небольшую (~ 5 МБ) DLL, которая также является управляемой. Это означает, что больше не нужно удалять 32-битные и 64-битные версии для работы с 32-битными и 64-битными клиентами Oracle! И больше никаких проблем с привязкой сборки, когда вы строите против 10.0.2.1 (или что-то еще), но ваши клиенты устанавливают ряд клиентов от 9i до 12c, включая `` g '' посередине), потому что вы можете просто отправить его с вашим приложением и управляйте им через nuget.
Но если вы используете ODP.NET, Managed, который доступен как пакет nuget, вам не нужно устанавливать Oracle Client. Вам нужна только ODP.NET, Managed DLL. И если вы ранее использовали ODP.NET, неуправляемую DLL, переключиться очень просто: просто измените все свои ссылки на управляемый ODP.NET (файлы .csproj в csharp и т. Д.), А затем измените любые операторы using
, например: using Oracle.DataAccess.Client
становится using Oracle.ManagedDataAccess.Client
и все! (Если вы предположительно не использовали некоторые из более продвинутых функций управления БД в полном клиенте, которые представлены в ODP.NET, Unmanaged, чего я сам не делал, так что удачи в этом ..). А также уничтожьте все эти раздражающие assemblyBindingRedirect
узлы из ваших _5 _ / _ 6_ файлов и никогда больше не переживайте из-за этого мусора!
Использованная литература:
Исправление проблем:
Эта ошибка обычно означает, что ODP.NET был найден в порядке, но клиент Oracle не найден или не установлен. Это также может произойти, если архитектура не соответствует (32-разрядный клиент Oracle установлен, но пытается использовать 64-разрядный неуправляемый ODP.NET, или наоборот). Это также может произойти из-за проблем с разрешениями, проблем с путями и других проблем с доменом приложения (ваше веб-приложение, ваш EXE или что-то еще), неспособным найти библиотеки DLL Oracle для фактического взаимодействия с Oracle по сети (ODP.NET Unmanaged DLL - это просто оболочки для этого, которые подключаются к ADO и тому подобное).
Общие решения, которые я нашел для этой проблемы:
Приложение 64-битное?
- Установите 64-битный клиент Oracle (32-битный клиент не работает)
Приложение 32-битное?
- Установите 32-битный клиент Oracle (64-битный не работает)
Клиент Oracle уже установлен для правильной архитектуры?
- Проверьте переменные PATH и
ORACLE_HOME
среды, убедитесь, что Oracle можно найти (в более новых версиях вместо этого может использоваться реестр)
- Проверьте ORACLE_HOME и настройки в реестре (и помните: реестр может быть 32-битным или 64-битным, поэтому убедитесь, что вы отметили тот, который соответствует вашему приложению!)
- Проверьте права доступа к папке
ORACLE_HOME
. Если вы не знаете, где это, проверьте реестр. Я видел случаи, когда рабочий процесс приложения ASP.NET использовал пользователя сетевой службы, и по какой-то причине установка 32-битных и 64-битных клиентов бок о бок приводила к удалению разрешений у первого клиента для группы Authorized Users
.. исправление разрешений в домашней папке это исправлено.
- Как всегда, удобно использовать SysInternals Process Monitor, чтобы узнать, какой файл отсутствует или не может быть прочитан.
person
nothingisnecessary
schedule
26.07.2018