downloads - oracle manageddataaccess




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

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

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


Насколько я понимаю, проблема заключалась в том, что, хотя 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 не копировалась на клиент.


Статья под названием «Развертывание 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