在没有实际安装 oracle 客户端的情况下在服务器上部署 c# 控制台应用程序

Deploying c# console application on server without actually installing oracle client

我有一个 c# 控制台应用程序,计划将批量数据从 oracle 导入到 sql 数据库。我倾向于使用安装文件夹中的 oracle 客户端 dll,而不是将其安装在服务器上。我阅读了许多关于在安装文件夹中复制所需 dll 的现有 SO 答案。

https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/

该应用程序在我的 windows 10 机器上运行良好,但没有安装 oracle 客户端。但是在 Windows Server 2008 R2 上它抛出错误说 OraOps12.dll 没有找到。虽然我有可用的 dll。我该如何解决问题?

确保项目中引用了 dll 并将其设置为复制到输出目录。我无法解释原因,但我已经引用了未设置为复制的 dll,并且 运行 遇到了与您描述的类似问题。

我认为从 Oracle 客户端手动复制 DLL 是个坏主意。您可以提供 Oracle.DataAccess.dll 的副本 - 对于所有其他内容,要求您的客户安装适当的 Oracle 客户端,即版本和体系结构必须与 Oracle.DataAccess.dll.

相匹配

或者使用 ODP.NET Managed Driver (Oracle.ManagedDataAccess.dll),这是一个独立的 DLL,不需要任何额外的文件。

我终于可以在不在服务器上实际安装 Oracle 客户端的情况下解决这个问题。我收到有关无法加载 OraOps12.dll 的错误消息,但最终我发现我缺少的 dll 是 msvcr120.dll。该 dll 是 Microsoft Visual C++ Runtime。所以现在,我的部署文件夹中有以下 Oracle dll,应用程序正在运行。无需更改配置。

  1. msvcr120.dll
  2. Oracle.DataAccess.dll
  3. OraOps12.dll
  4. oraociei12.dll
  5. oraons.dll
  6. oci.dll