Проблема загрузки клиентских библиотек Oracle при запуске в сборке NAnt - PullRequest
2 голосов
/ 22 марта 2010

Я пытаюсь использовать dbdeploy для управления изменениями схемы Oracle.Я могу успешно запустить его из командной строки, чтобы он генерировал мои сценарии изменений, но когда я пытаюсь выполнить его с помощью задачи dbdeploy NAnt, выполняемой через TeamCity, я получаю сообщение об ошибке:

System.Data.OracleClient requires Oracle client software 
version 8.1.7 or greater.

Я делаюустановить клиентское программное обеспечение Oracle 10.2.0.2.Это первая запись в системном пути, и приложение dbdeploy.exe способно успешно согласовать соединение с Oracle.Код dbdeploy динамически загружает сборку System.Data.OracleClient, которая, в свою очередь, пытается использовать биты клиента Oracle для связи с базой данных.Это то, что не работает в моей среде NAnt.

Я проверил следующие пункты:

  • Один и тот же пользовательский идентификатор запускает процесс в обоих случаях
  • в обоих случаях используется один и тот же рабочий каталог
  • В обоих случаях выполняется один и тот же код dbdeploy с одинаковыми предоставленными параметрами
  • В обоих случаях используется одна и та же строка подключения к базе данных
  • В обоих случаях динамически загружается одна и та же сборка ADO.NET (System.Data.OracleClient, версия = 1.0.5000.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089)

Вот вершинатрассировка стека во время ошибки:

at System.Data.OracleClient.OCI.DetermineClientVersion()
at System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction
  (String userName, String password, String serverName, 
   Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
at System.Data.OracleClient.OracleInternalConnection..ctor(
   OracleConnectionString connectionOptions)
at System.Data.OracleClient.OracleConnectionFactory.CreateConnection(
   DbConnectionOptions options, Object poolGroupProviderInfo, 
   DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(
   DbConnection owningConnection, DbConnectionPool pool, 
   DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(
   DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(
   DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(
   DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(
   DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(
   DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OracleClient.OracleConnection.Open()
at Net.Sf.Dbdeploy.Database.DatabaseSchemaVersionManager.
   GetCurrentVersionFromDb()

Мой главный вопрос заключается в следующем: как я могу узнать, что отличается в этих работающих средах, чтобы понять, почему мое клиентское программное обеспечение Oracle не может быть загружено?

...