编辑:我已经修改了这个现代化的答案。另外,澄清一下,ClickOnce 只是一个应用程序部署工具,如何在您的应用程序中使用 Oracle Client 和 ODP.Net 仍然由架构决定。以下是最常见场景的摘要:
智能客户端应用程序(例如客户端应用程序 + Web 服务)
ClickOnce 部署的客户端应用程序安装在用户的机器上,但会与某种服务对话以处理数据。在这种情况下,您的客户端应用程序不需要分发 Oracle 客户端或 ODP.Net。
Oracle 客户端和 ODP.Net 包应通过 Oracle 的正常指令安装在托管后端服务的机器上,并从该项目/应用程序中引用,因为将使用/分发任何其他库。
胖客户端“精简部署”应用程序(例如 Citrix 上的“胖客户端”)
ClickOnce 部署的客户端应用程序是“胖”的,因为它包含自己的数据层,因此必须能够通过本地安装的客户端连接到 Oracle,并且能够引用 ODP.Net 库。
在这种情况下,Oracle 客户端和 ODP.Net 软件包应使用 Oracle 的标准指令安装在主机(例如 Citrix 机器)上,并且您的应用程序应引用安装在其主机上的适当库。
胖客户端“胖部署”应用程序(例如用户机器上的胖客户端)
在这种情况下,您的应用程序是一个典型的“胖客户端”,因为它有自己的数据层,并且需要能够与 Oracle 客户端和 ODP.Net 库进行通信。
我们在这里讨论的特定场景是如何在您的应用程序中分发 Oracle 客户端和 ODP.Net(例如,当您的用户没有在他们的机器上安装这些产品时)。以下是说明:
下载Oracle 数据访问组件包。
(A) 当前版本是 ODAC 11.2 Release 4 (11.2.0.3),包括对 Microsoft Entity Framework 4 的支持。
(B) 您需要安装 32 位版本的 ODP.Net,因为 Visual Studio 是 32 位应用程序。然后,您可以在部署时编译到目标处理器和位版本。
ODAC 包中包含 Oracle Instant Client 和 ODP.Net 库。您需要将即时客户端库复制到您的应用程序并将它们设置为“始终复制”
像引用任何其他 lib 和 set 一样引用Oracle.DataAccess.ClientCopy Local = True
。
您的连接字符串应该看起来很像TNSNAMES.ORA
文件中的正常条目:
Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SID = oracle_world_here)));User Id=schema_here;Password=password_here;Persist Security Info=TRUE;
笔记
A. 即时客户端有两个主要版本 - 完整版(约 115mb),包括多语言支持,以及精简版(约 28mb),仅支持英语。
B.重要确保部署的库都来自相同版本的客户端 - 这意味着如果您部署 32 位 ODP.Net,您必须部署 32 位即时客户端库。如果您使用 11.2 即时客户端,则不能使用 11.0 ODP.Net 等。这很愚蠢,但很多人忽略了这一点;使用良好的源代码控制。
C. 我的经验,以下库被放置在我的项目的根目录中(以避免任何权限或 %PATH% 问题)
oci.dll、ociw32.dll、orannzsbb11.dll、oraocci11.dll、oraociicus11.dll、oraops11w.dll
总结和结果:
您现在可以将 ClickOnce 部署用于所有 Windows 客户端应用程序 - fat、thing 或 smart。