manageddataaccess Почему ODP.NET 11 развертывание xcopy не работает на компьютере с установленным Oracle DB 10?




oracle manageddataaccess (4)

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

Оказывается, если вы хотите, чтобы приложение работало с развертыванием x64y ODAC 11 независимо от того, что еще пользователь мог установить на своей машине, вам нужно сделать 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);

EDIT: Важно также отметить, что Oracle выбросит эту ошибку не только для экологических проблем, но и если один из файлов отсутствует на целевой машине. Я получил ту же ошибку на других машинах, несмотря на настройки среды, потому что у меня была Subversion, чтобы игнорировать каталоги, называемые «bin», поэтому OraOps DLL не копировалась на клиент.

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

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

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

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 независимо от того, что?


Вы хотите заставить свои драйверы 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


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

Тем не менее, ответы ObiWanKenobi и Josh Kodroff содержат важную дополнительную информацию, которая соответствует моему опыту.

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


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