Развертывание консольного приложения c # на сервере без фактической установки клиента Oracle - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть консольное приложение c #, которое запланировано для импорта массовых данных из Oracle в базу данных SQL. Я склоняюсь к использованию dll клиента oracle из папки установки вместо того, чтобы устанавливать его на сервере. Я прочитал много существующих ответов SO на копирование необходимых DLL в папке установки.

https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/

Приложение отлично работает на моем компьютере с Windows 10, на котором не установлен клиент Oracle. Но на Windows Server 2008 R2 выдает ошибку, говоря, что OraOps12.dll не найден. Хотя у меня есть dll в наличии. Что я могу сделать, чтобы устранить проблему?

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Убедитесь, что в проекте есть ссылка на dll, и он настроен на копирование в выходной каталог. Я не могу объяснить почему, но я ссылался на то, что dll не настроен на копирование, и столкнулся с такими же проблемами, как вы описываете.

enter image description here

0 голосов
/ 18 апреля 2019

Наконец-то я смог разобраться без фактической установки Oracle Client на сервер. Я получаю сообщение об ошибке не могу загрузить OraOps12.dll, но в конце концов я обнаружил, что dll, которую я пропустил, было msvcr120.dll. DLL является Microsoft Visual C ++ Runtime. Итак, теперь у меня в папке развертывания есть следующие библиотеки Oracle, и приложение работает. Никаких изменений в конфигурации не требуется.

  1. msvcr120.dll
  2. Oracle.DataAccess.dll
  3. OraOps12.dll
  4. oraociei12.dll
  5. oraons.dll
  6. oci.dll
0 голосов
/ 17 апреля 2019

Я думаю, что это плохая идея - копировать DLL из Oracle Client вручную. Вы можете предоставить копию Oracle.DataAccess.dll - для всех остальных попросите вашего клиента установить соответствующий клиент Oracle, т.е. версия и архитектура должны соответствовать Oracle.DataAccess.dll.

Или используйте управляемый драйвер ODP.NET (Oracle.ManagedDataAccess.dll), это автономная DLL, которая не требует никаких дополнительных файлов.

...