如何在不将整个组件安装到用户的情况下部署使用ODAC的.NET应用程序?

3oo*_*oon 24 .net c# deployment oracle odac

我编写了一个连接到Oracle 10g数据库的C#应用​​程序.使用Oracle Data Access组件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

但它仍然没有用.我该怎么做才能解决这个问题?

小智 27

您无需单独安装任何Oracle客户端.我在.exe中安装了以下目录:

   Oracle.DataAccess.dll

   oci.dll 

   OraOps11w.dll

   oraociei11.dll

   msvcr71.dll 
Run Code Online (Sandbox Code Playgroud)

确保您的项目引用了您提供的相同Oracle.DataAccess.dll.这适用于从未安装过oracle客户端的新PC.

我通过指定这样的连接字符串避免使用TNSNAMES.ora

connectionstring = Data Source ="(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST =)(PORT =))"+"(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =)))"

如果您正在使用TNSNAMES.ora,只需将连接详细信息剪切并粘贴到单个行字符串中即可.

请参阅 将C#连接到Oracle数据库所需的最小客户端占用量是多少?

欲获得更多信息.

  • EJM

有关如何获取上述dll的信息,请参阅本教程:http://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/


mas*_*son 13

自此问题发布以来,Oracle Managed Client现已可用(由Oracle提供).我一直在使用它没有问题.不需要搜索DLL或特殊配置.只需添加包,修改配置文件,即可进行设置.NuGet Link和Oracle关于它的文章 ..

由于此客户端完全使用.NET托管代码编写,因此它独立于架构,不需要外部DLL,安装Oracle客户端或类似的东西.

您可以使用Package Manager在VS中安装它.

Install-Package Oracle.ManagedDataAccess
Run Code Online (Sandbox Code Playgroud)

我已经把它放在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>
Run Code Online (Sandbox Code Playgroud)

然后为您的连接字符串:

 <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"/>
Run Code Online (Sandbox Code Playgroud)
  • IPORNAMEOFHOST =这是您服务器的IP地址或DNS名称.
  • PORTNUM =这是Oracle正在侦听的端口号.通常是1521年.
  • ORACLESID =您尝试连接的数据库的SID.
  • ORACLEUSER =用于连接的用户名.
  • ORACLEPASSWORD =用于连接的密码.

  • 我不能用它说EF5,但我已经在.NET 4中成功使用它.[本文](http://www.oracle.com/technetwork/issue-archive/2014/14-mar/o24odp -2147205.html)建议EF应该工作. (2认同)

Jus*_*ave 9

我不确定您是否需要安装Oracle客户端以及~50 MB ODAC安装或仅支持独立ODAC.

如果担心必须安装Oracle客户端和ODAC,您可以使用Oracle Instant Client吗?这是安装Oracle客户端的最小尺寸方法.您还需要ODAC xcopy补充剂.

如果您关心的只是ODAC安装,我认为可用的占用空间较小.