Это старый, но все еще актуальный вопрос, и хотя ответы здесь полезны, никто не ответил полностью на оба вопроса ОП.
1. Нужно ли устанавливать клиент ODP.NET и Oracle на компьютер, на котором я хочу запустить свое приложение?
ДА - , если вы используете ODP.NET, Unmanaged . Эта версия обычно устанавливается при выборе «Поставщик данных Oracle для .NET» в установщике клиента Oracle (например). Вы загружаете это из Oracle (просто Google: URL-адреса Oracle часто меняются).
Но если вы используете ODP.NET, управляемый (и вы, вероятно, хотите использовать этот вместо этого), то нет, вам нужно только установить (или развернуть) ODP.NET, управляемый с приложением, а не полный Oracle Клиент. Подробнее см. Ниже.
2. Если да, есть ли другой способ, которым я не должен устанавливать их, но все еще могу запустить мое приложение?
Да, есть хотя бы один способ. И это Управляемый порт ODP.NET.
К сожалению, обычные обходные пути, включая ODBC, Microsoft Provider Oracle для .NET (да, тот старый, устаревший) и ODP.NET, неуправляемую 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, то это очень легко переключить: просто измените все ссылки на Managed ODP.NET (файлы .csproj в csharp и т. Д.), А затем измените любой using
утверждения, например: using Oracle.DataAccess.Client
становится using Oracle.ManagedDataAccess.Client
и все! (Если вы предположительно не использовали некоторые из более продвинутых функций управления БД в полном клиенте, которые представлены в ODP.NET, Unmanaged, чего я не сделал сам, так что удачи вам в этом ..). А также уничтожьте все эти надоедливые assemblyBindingRedirect
узлы из ваших app.config
/ web.config
файлов и никогда больше не потеть в этом мусоре!
Ссылки:
Поиск и устранение неисправностей:
Эта ошибка обычно означает, что ODP.NET был найден в порядке, но клиент Oracle не был найден или не установлен. Это также может произойти, если архитектура не совпадает (установлен 32-битный клиент Oracle, но пытается использовать 64-битный неуправляемый ODP.NET или наоборот). Это также может происходить из-за проблем с разрешениями, проблем с путями и других проблем, связанных с тем, что домен приложения (ваше веб-приложение или ваш EXE-файл или что-то в этом роде) не может найти библиотеки DLL Oracle для фактической связи с Oracle по сети (неуправляемый ODP.NET DLL - это просто обертки для этого, которые подключаются к ADO и тому подобному).
Общие решения, которые я нашел для этой проблемы:
Приложение 64-битное?
- Установить 64-битный клиент Oracle (32-битный не будет работать)
Приложение 32-битное?
- Установить 32-битный клиент Oracle (64-битный не будет работать)
Oracle Client уже установлен для правильной архитектуры?
- Проверьте переменные среды PATH и
ORACLE_HOME
, убедитесь, что Oracle может быть найден (более новые версии могут использовать Registry вместо)
- Проверьте ORACLE_HOME и настройки в Реестре (И помните: Реестр является либо 32-битным, либо 64-битным, поэтому обязательно проверьте тот, который соответствует вашему приложению!)
- Проверьте разрешения для папки
ORACLE_HOME
. Если вы не знаете, где это, проверьте реестр. Я видел случаи, когда рабочий процесс приложения ASP.NET использовал пользователя сетевой службы и по какой-то причине при установке 32-разрядных и 64-разрядных клиентов рядом друг с другом были удалены разрешения для первого клиента для группы Authorized Users
. исправление перми на домашней папке исправило это.
- Как всегда, с помощью SysInternals Process Monitor удобно выяснить, какой файл отсутствует или не может быть прочитан.