Подтвердить что ты не робот

Как я могу развернуть приложение .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

Но все же это не сработало. Что делать, чтобы решить эту проблему?

4b9b3361

Ответ 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?

для получения дополнительной информации.

  • EJM

Информацию о том, как получить указанные выше 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 = пароль для подключения.