Почему развертывание ODP.NET 11 xcopy не работает на машине с установленной Oracle DB 10?

StackOverflow https://stackoverflow.com/questions/491876

  •  20-08-2019
  •  | 
  •  

Вопрос

У меня есть приложение, которое использует локальную версию ODAC 11 ниже каталога, в котором находится файл .exe.Идея состоит в том, что мы хотим, чтобы наше приложение использовало локальный ODAC 11 независимо от того, что еще пользователь установил на свой компьютер.

Oracle.DataAccess.dll находится в том же каталоге, что и .exe.

Он работает нормально, когда на клиентском компьютере не установлен клиент Oracle, но я получаю сообщение об ошибке при запуске на компьютере с установленной базой данных Oracle 10.2.0.что-то:

The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.

[Stack Trace]

The provider is not compatible with the version of Oracle client
OracleException
   at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()

Я предполагаю, что это как-то связано с политикой привязки времени выполнения, но поиск «Политики привязки времени выполнения Oracle/ODAC/ODP.NET» в Google не дал ничего полезного.

Кто-нибудь знает, как решить проблему?

Если не эта конкретная проблема, может ли кто-нибудь указать мне на обзор того, как делать то, что я хочу:убедиться, что мое приложение использует ODAC 11, несмотря ни на что?

Это было полезно?

Решение

Насколько я понимаю, проблема заключалась в том, что, хотя Oracle.DataAccess.dll находился в том же каталоге, что и приложение, он не мог найти своих собратьев нижнего уровня (oci и др.), отсюда и ошибка совместимости.

Оказывается, если вы хотите, чтобы приложение работало с развертыванием ODAC 11 xcopy независимо от того, что еще пользователь установил на свой компьютер, вам нужно сделать 2 вещи:

  1. Установите переменную среды PATH для процесса.(Я уже делал это.)
  2. Установите переменную среды ORACLE_HOME для процесса.(Я этого не делал.)

    Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process);
    

РЕДАКТИРОВАТЬ: Также важно отметить, что Oracle выдает эту ошибку не только из-за проблем с окружающей средой, но и в том случае, если на целевой машине отсутствует один из файлов.Я получил ту же ошибку на других машинах, несмотря на настройки среды, потому что у меня была настроена Subversion на игнорирование каталогов с именем «bin», поэтому DLL OraOps не копировалась на клиент.

Другие советы

Статья под названием «Развертывание ODP.NET с помощью Oracle Instant Client» находится по адресу http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html дал то, что для меня было лучшим объяснением того, как реализовать урезанное развертывание типа xcopy с вашим приложением.Для поддержки требуется всего 5 библиотек Oracle DLL.

Тем не менее, ответы ОбиВана Кеноби и Джоша Кодроффа предоставляют важную дополнительную информацию, которая соответствует моему опыту.

Добавьте к этому: http://www.brothersincode.com/post/Oracle-ODPnet-xcopy-deployment-for-aspnet.aspx

Вы хотите заставить драйверы ODP.NET использовать копию oci.dll, находящуюся в вашей локальной папке, вместо уже установленной.

Вы можете принудительно это сделать либо

  • установка переменной PATH, чтобы система сначала нашла вашу копию oci.dll (как в ответе Джоша Кодроффа)

или

  • вы можете использовать раздел конфигурации ODP.NET в app.config (или web.config), чтобы явно установить значение «DllPath».

Подробности см. http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.html и http://database.in2p3.fr/doc/oracle/Oracle_Database_11_Release_1_(11.1)_Documentation/win.111/e10927/featConfig.htm

Если вы используете клиент Oracle 10.2.0.1 или 10.2.0.2, в примечании Oracle 215255.1 указано, что если вы примените набор исправлений 10.2.0.3, проблема будет устранена.Получите патч базы данных 10.2.0.3 (852 МБ) и пропатчите клиент дома.Да, это полный набор исправлений для сервера базы данных, но он применим и к клиенту.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top