Как я могу развернуть приложение .NET, использующее ODAC, без установки всего компонента пользователю?
Я написал приложение С#, которое подключается к базе данных Oracle 10g. Используя Oracle Data Access Component 11.2 "ODAC", он отлично работает на моей машине.
И теперь я хочу развернуть приложение и установить его на другую "чистую машину", которая имеет только .NET Framework! И я не хочу устанавливать весь компонент ODAC пользователю!
Как я мог это сделать? Я попытался включить все необходимые DLL файлы в папку bin, например:
- oci.dll
- OCIW32.DLL
- Oracle.DataAccess.dll
- orannzsbb11.dll
- oraocci11.dll
- oraociicus11.dll
- OraOps11w.dll
- msvcr71.dll
Но все же это не сработало. Что делать, чтобы решить эту проблему?
Ответы
Ответ 1
Я не уверен, связана ли ваша проблема с необходимостью установки клиента Oracle в дополнение к установке ODAC размером ~ 50 МБ или просто автономному ODAC.
Если проблема связана с необходимостью установки клиента Oracle и ODAC, вы можете использовать Oracle Instant Client? Это самый маленький метод отслеживания для установки клиента Oracle. Вам также понадобится дополнение Ocopy xcopy.
Если ваша проблема - это просто установка ODAC, я не думаю, что есть меньшая занимаемая площадь.
Ответ 2
Вам не нужно устанавливать какого-либо клиента Oracle отдельно.
Я установил следующее в том же каталоге, что и .exe:
Oracle.DataAccess.dll
oci.dll
OraOps11w.dll
oraociei11.dll
msvcr71.dll
Убедитесь, что ваш проект ссылается на тот же файл Oracle.DataAccess.dll, который вы доставляете.
Это работало на новом ПК, на котором не было установленных клиентов оракула.
Я избегал использования TNSNAMES.ora, указав строку соединения, подобную этой
connectionstring = Источник данных = "(ОПИСАНИЕ = (ADDRESS = (PROTOCOL = TCP) (HOST =) (PORT =))" + "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =)))"
Если вы используете TNSNAMES.ora, просто вырезайте и вставьте детали соединения в одну строку.
см Каков минимальный клиентский след, необходимый для подключения С# к базе данных Oracle?
для получения дополнительной информации.
Информацию о том, как получить указанные выше DLL, см. в этом руководстве: http://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/
Ответ 3
Поскольку этот вопрос был опубликован, Oracle Managed Client теперь доступен (предоставляется Oracle). Я использую его без проблем. Не требует поиска DLL или специальной конфигурации. Просто добавьте пакет, измените файл конфигурации, и вы установите. ссылка NuGet и статья от Oracle об этом..
Поскольку этот клиент написан полностью в управляемом стандарте .NET, он независим от архитектуры и нет необходимости в внешних DLL, установке Oracle Client или что-то в этом роде.
Вы можете установить его в VS с помощью диспетчера пакетов.
Install-Package Oracle.ManagedDataAccess
Я попытался поместить это в файл machine.config(хотя он также будет работать в web.config или app.config). Я обнаружил, что это помогает избежать конфликтов с другими драйверами, которые могут быть установлены:
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.DataAccess.Client" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver"
invariant="Oracle.ManagedDataAccess.Client"
description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data>
<configuration>
Затем для вашей строки подключения:
<add name="MyConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IPORNAMEOFHOST)(PORT=PORTNUM)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLESID)));User Id=ORACLEUSER;Password=ORACLEPASSWORD;" providerName="Oracle.ManagedDataAccess.Client"/>
- IPORNAMEOFHOST = Это IP-адрес или DNS-имя вашего сервера.
- PORTNUM = номер порта, который прослушивает Oracle. Обычно 1521.
- ORACLESID = SID базы данных, к которой вы пытаетесь подключиться.
- ORACLEUSER = Имя пользователя для подключения.
- ORACLEPASSWORD = пароль для подключения.