Почему развертывание ODP.NET 11 xcopy не работает на компьютере с установленной Oracle DB 10? - PullRequest
5 голосов
/ 29 января 2009

У меня есть приложение, которое использует локальную версию 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, несмотря ни на что?

Ответы [ 4 ]

4 голосов
/ 09 февраля 2011

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

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

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

4 голосов
/ 02 февраля 2009

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

Оказывается, что если вы хотите, чтобы приложение работало с развертыванием 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», поэтому библиотека OraOps не копировалась на клиент.

2 голосов
/ 01 сентября 2010

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

Вы можете форсировать это либо

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

или

  • вы можете использовать раздел конфигурации 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

0 голосов
/ 02 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...