我怎样才能部署一个使用ODAC的.NET应用程序,而无需将整个组件安装到用户?

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

但仍然没有奏效。 我该怎么办才能解决这个问题?

我不确定您的担心是否需要安装Oracle客户端以及〜50 MB ODAC安装或者是独立的ODAC。

如果担心需要安装Oracle客户端和ODAC,则可以使用Oracle即时客户端 ? 这是安装Oracle客户端的最小尺寸方法。 你还需要ODAC xcopy补充。

如果你关心的只是ODAC安装,我不认为有一个更小的可用空间。

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

Oracle.DataAccess.dll oci.dll OraOps11w.dll oraociei11.dll msvcr71.dll 

确保你的项目引用了你正在交付的同一个Oracle.DataAccess.dll。 这工作在一个从来没有安装Oracle客户端的新鲜电脑。

我通过指定一个连接string来避免使用TNSNAMES.ora

connections =数据源=“(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST =)(PORT =))”+“(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =)))”

如果您使用的是TNSNAMES.ora,只需将连接详细信息剪切并粘贴到单个线路string中即可。

请参阅将C#连接到Oracle数据库所需的最小客户机占用空间是多less?

了解更多信息。

  • EJM

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

自从发布这个问题以来,Oracle托pipe客户端现已可用(由Oracle提供)。 我一直在使用它没有问题。 不需要查找DLL或特殊configuration。 只需添加软件包,修改configuration文件,然后设置。 NuGet Link和Oracle 的一篇文章 。

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

您可以使用软件包pipe理器将其安装在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> 

然后为您的连接string:

  <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 =用于连接的密码。