ODP.net работает локально, но не на другом компьютере

1

Я создал проект С# на своем компьютере, который использует ODP.net, я импортировал ссылку Oracle.DataAccess. На моем ПК я пытаюсь установить соединение с базой данных, и он работает нормально, однако, если я скопирую файл.exe моего приложения на другом компьютере, он не работает, и я получаю следующую ошибку:

System.IO.FileNotFoundException: Не удалось загрузить файл или сборку "Oracle.DataAccess, Version = 4.112.3.0, Culture = neutral, PublicKeyToken = 89b483f429c47342" или одна из его зависимостей. Система не может найти указанный файл. Имя файла: 'Oracle.DataAccess, Version = 4.112.3.0, Culture = neutral, PublicKeyToken = 89b483f429c47342'

Почему С# не инкапсулирует все файлы, необходимые в.exe? Что я могу сделать, чтобы эта программа работала независимо от исполняемого компьютера?

  • 3
    Так работает платформа .NET. Все ссылки хранятся снаружи, в вашей папке bin , в GAC ... Может быть, создать установщик :)
  • 0
    И если вы используете ODP.NET, подготовьтесь к тому, чтобы распространять ту же установку клиента, которую вы используете в своей разработке. Даже младшая версия должна быть такой же, это предотвратит много головной боли.
Показать ещё 4 комментария
Теги:
odp.net

4 ответа

1
Лучший ответ

По просьбе Вито, вот мой комментарий в качестве ответа:

Я предлагаю не использовать "классическую" ODP.NET, которая имеет зависимости от дополнительных установленных компонентов ODP в системе, но вместо этого использует исключительно управляемую версию ODP.NET.

Для управляемого ODP.NET у вас есть одна сборка (то есть DLL), которую вы можете отправить с вашим приложением (например, в папку "bin", если это приложение ASP.NET), и все готово.

Чтобы завершить его, строка подключения в моих случаях выглядит примерно так:

<add 
    name="ora" 
    connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyServer)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE))); User Id=MyUser; Password=MyPassword" 
    providerName="system.data.oracleclient" />

Управляемая версия была действительно большим улучшением с точки зрения простоты использования в моих проектах.

  • 1
    Спасибо, я смог решить мою проблему с этим. Примите во внимание, что вам нужно иметь Visual Studio 2012, чтобы иметь возможность устанавливать пакеты.
1

вы должны установить версию базы данных Oracle на каждой машине, на которой вы собираетесь установить приложение.

Другой вариант - перейти в Oracle и загрузить только драйверы. Загрузите из Oracle, затем вам нужно включить их в свой проект, обратитесь к этой DLL.

1

См. Ответ на аналогичный вопрос, который у меня был. В основном эта проблема oracle.dataaccess.dll, она создает платформу (32 или 64) и наличие некоторых ее зависимостей (например, OraOps11w.dll). Эти вещи нужно проверить, чтобы убедиться, что они присутствуют и правильно настроены. Это станет большим в развертывании! Конечно, если вы вызываете библиотеку на уровне машины (не на уровне приложения) из разных приложений, вы должны проверить, зарегистрирована ли она в GAC.

Изменение: в нем простейшая форма:

1 - Вы должны иметь эти DLL в каталоге приложения: OraOps11w.dll, oci.dll, orannzsbb11.dll и oraociei11.dll.

2 - Вы должны добавить ссылку на Oracle.DataAccess.dll.

Где можно их получить?

1 - Из установочного каталога Oracle Client (а не сервера), если вы уже установили клиент oracle (включая ODP.NET).

2 - Если вы установили ODT.NET.

3 - Получив ODP.NET (желательно zip-архив, а не установочный пакет).

  • 0
    Еще лучше: попробуйте использовать управляемую версию ODP.NET. Одна отдельная DLL для развертывания в вашем приложении или папке Bin, без зависимостей.
  • 0
    Я думаю, что его вопросы связаны со ссылками вообще, а не с ODP.NET. Ответ должен прояснить, как ссылки на внешние ссылки независимо от поставщика.
Показать ещё 3 комментария
0

Здесь есть ТОНЫ возможных причин. Сначала я начал бы копирование всей папки, чем содержащий.EXE файл, а не только сам файл.EXE. В этой папке есть вещи, которые нужны вашему.EXE для запуска. Кроме того, я бы проверял зависимости от компьютера, который не работает с программой Dependency Walker. Все может пойти не так, если вы разрабатываете 32-битную версию и пытаетесь запустить ее на 64-битной основе. Все может пойти не так, если вы работаете в Windows и пытаетесь запустить MAC. Существует много изменений, которые могут измениться с одного компьютера на другой, и ваш код должен быть готов к этому. Зависимость ходок может сказать вам, если вы неправильно подключаетесь к определенным зависимостям (в основном.DLL). Если вы заходите в папку выпуска, содержащую ваш EXE, если в этом же каталоге есть файлы.DLL, эти.DLL, вероятно, необходимы на любом компьютере, который попытается запустить эту программу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню