Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 程序不';不能在每台机器上工作,它的工作位置取决于安装的Oracle客户端版本。为什么?_.net_Oracle - Fatal编程技术网

.net 程序不';不能在每台机器上工作,它的工作位置取决于安装的Oracle客户端版本。为什么?

.net 程序不';不能在每台机器上工作,它的工作位置取决于安装的Oracle客户端版本。为什么?,.net,oracle,.net,Oracle,我在项目中引用了Oracle.DataAccess.dll。它在我的电脑上运行得很好。将其传输到其他同事的计算机时,它将不再工作,错误为: The provider is not compatible with the version of Oracle client 即使dll被复制到应用程序目录中。所以我用不同版本的dll编译了它,它仍然在我的计算机上工作,现在也在我同事的计算机上工作,但在客户端的服务器上不工作 我在谷歌上搜索了很多,我发现所有的解决方案都很糟糕——它们涉及在机器

我在项目中引用了Oracle.DataAccess.dll。它在我的电脑上运行得很好。将其传输到其他同事的计算机时,它将不再工作,错误为:

    The provider is not compatible with the version of Oracle client
即使dll被复制到应用程序目录中。所以我用不同版本的dll编译了它,它仍然在我的计算机上工作,现在也在我同事的计算机上工作,但在客户端的服务器上不工作

我在谷歌上搜索了很多,我发现所有的解决方案都很糟糕——它们涉及在机器上安装软件——我的应用程序需要在任何机器上运行,不管机器上安装了什么。有没有一种方法可以使这项工作在全球范围内普遍开展

编辑:即使需要安装Oracle客户端,也可以接受。但挑三拣四是不能接受的。我可以选择我想要的DLL的任何版本并使用它,我想要一个在任何地方都能工作的版本。但它似乎不是这样工作的


令人惊讶的是,我从未在System.Data.OracleClient上遇到过这个问题,这与此非常相似。

除了托管的Oracle.DataAccess.dll之外,您还需要将本机的OCI dll复制到应用程序的目录中。获取这些DLL的最简单方法是通过Oracle


只需小心使用正确的“位”(32位dll用于“x86”配置,“x64”配置,64位dll用于“任意CPU”配置,以及与目标计算机匹配的任何位都用于“任意CPU”配置)。

除了托管的Oracle.DataAccess.dll外,还需要将本机OCI dll复制到应用程序的目录中。获取这些DLL的最简单方法是通过Oracle


只需小心使用正确的“位”(32位DLL用于“x86”配置,64位DLL用于“x64”配置,以及任何与目标计算机匹配的位用于“任意CPU”配置)。

听起来您希望应用程序使用。您的应用程序需要安装基本或基本Lite即时客户端软件包以及ODAC软件包,并在安装过程中配置几个环境变量。

听起来您希望应用程序使用。您的应用程序需要安装基本或基本Lite即时客户端软件包以及ODAC软件包,并在安装过程中配置几个环境变量。

谢谢。如果我们假设每台目标机器都安装了Oracle客户端,但是安装了任意版本,那么是否有可能以某种方式避免复制所有这些文件?我这样问是因为我有一个不同的应用程序,它使用System.Data.OracleClient,我从未见过它在任何地方不工作,不管OC版本如何,甚至不管“比特数”如何,它都能工作,而且我甚至不必打包一个与oracle相关的DLL。Oracle.DataAccess真的不可能做到这一点吗?我不介意复制一个文件,但在这种特定情况下,20+mb会有点多…@svinja如果您可以检查已安装的Oracle客户端版本,那么我认为您可以在已安装正确的文件时跳过复制文件。但我不确定如何执行此检查。如果用户在安装应用程序后卸载或安装不同版本的Oracle客户端,这也会有问题。现在空间和带宽都很便宜,我建议你只需复制。我已经改用System.Data.OracleClient,不再需要任何DLL,而且它可以在所有三台机器上工作,即使它们有不同的OCs。这不是一个真正的“解决方案”,但它暂时起作用。我不能安装或类似的东西,不幸的是,它必须尽可能简单,因为这个特定的项目更多的是由其他应用程序调用的实用程序,而不是用户应用程序。因此,必须能够轻松地将其与另一个应用程序打包。然而,由于S.D.OC不再得到支持,我希望最终能找到一个“真正”的解决方案。谢谢。如果我们假设每台目标机器都安装了Oracle客户端,但是安装了任意版本,那么是否有可能以某种方式避免复制所有这些文件?我这样问是因为我有一个不同的应用程序,它使用System.Data.OracleClient,我从未见过它在任何地方不工作,不管OC版本如何,甚至不管“比特数”如何,它都能工作,而且我甚至不必打包一个与oracle相关的DLL。Oracle.DataAccess真的不可能做到这一点吗?我不介意复制一个文件,但在这种特定情况下,20+mb会有点多…@svinja如果您可以检查已安装的Oracle客户端版本,那么我认为您可以在已安装正确的文件时跳过复制文件。但我不确定如何执行此检查。如果用户在安装应用程序后卸载或安装不同版本的Oracle客户端,这也会有问题。现在空间和带宽都很便宜,我建议你只需复制。我已经改用System.Data.OracleClient,不再需要任何DLL,而且它可以在所有三台机器上工作,即使它们有不同的OCs。这不是一个真正的“解决方案”,但它暂时起作用。我不能安装或类似的东西,不幸的是,它必须尽可能简单,因为这个特定的项目更多的是由其他应用程序调用的实用程序,而不是用户应用程序。因此,必须能够轻松地将其与另一个应用程序打包。然而,由于S.D.OC不再得到支持,我希望最终能找到一个“真正”的解决方案。