ODP.net在本地运行,但在其他计算机上运行

时间:2014-06-30 17:42:31

标签: c# oracle odp.net

我在计算机上创建了一个使用ODP.net的C#项目,我导入了Oracle.DataAccess的引用。在我的电脑上,我尝试连接到数据库并且它正常工作,但是,如果我在另一台计算机上复制我的应用程序的.exe文件,它不起作用,我收到以下错误:

  

System.IO.FileNotFoundException:无法加载文件或程序集   ' Oracle.DataAccess,版本= 4.112.3.0,文化=中立,   公钥= 89b483f429c47342'或其中一个依赖项。该   系统找不到指定的文件。文件名:' Oracle.DataAccess,   Version = 4.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'

为什么C#封装了.exe中所需的所有文件?无论执行计算机是什么,我该怎么做才能使这个程序工作?

4 个答案:

答案 0 :(得分:1)

您必须在要安装应用程序的每台计算机上安装Oracle数据库版本。

另一个选择是转到Oracle并下载驱动程序。 Download from Oracle,然后你需要将它们包含在你的项目中,引用这个dll。

答案 1 :(得分:1)

请参阅answer我遇到的类似问题。主要是这个问题是关于oracle.dataaccess.dll,它是构建平台(32或64)并且存在一些依赖关系(如OraOps11w.dll)。应检查这些内容以查看是否存在并正确配置。部署会很大!当然,如果您在不同应用程序的机器级别(非应用程序级别)调用库,则应检查它是否也在GAC中注册。

编辑:以最简单的形式:

1 - 您需要在应用目录中拥有这些dll:OraOps11w.dlloci.dllorannzsbb11.dlloraociei11.dll

2 - 您必须Oracle.DataAccess.dll添加引用

哪里可以得到这些?

1 - 如果您已经安装了oracle客户端(包括ODP.NET),请从 Oracle客户端(不是服务器)的安装目录。

2 - 如果您安装了ODT.NET。

3 - 获取ODP.NET(最好是zip存档,而不是安装包)。

答案 2 :(得分:1)

As of request by Vito,这里是my comment作为答案:

我建议不要使用" classic" ODP.NET依赖于系统上其他已安装的ODP组件,而是使用purely managed version of ODP.NET

对于托管的ODP.NET,您可以使用您的应用程序附带的单个程序集(即DLL)(例如,如果它是ASP.NET应用程序,则在" bin"文件夹中),并且您和#39;重新完成。

为了使其完整,我的案例中的连接字符串类似于:

<add 
    name="ora" 
    connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyServer)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE))); User Id=MyUser; Password=MyPassword" 
    providerName="system.data.oracleclient" />

在我的项目中,托管版本在易用性方面确实是一个巨大的进步。

答案 3 :(得分:0)

这里有很多可能的原因导致你的问题。我首先要复制整个文件夹而不是包含.EXE文件,而不仅仅是.EXE文件本身。此文件夹中有一些东西,你的.EXE需要运行。另外,我会检查计算机上不依赖于程序Dependency Walker的依赖项。如果您使用32位进行开发并尝试在64位上运行,则可能会出错。如果您在Windows上开发并尝试在MAC上运行,则可能会出错。有很多可以从一台计算机更改为下一台计算机,并且您的代码必须为此做好准备。如果您没有正确连接到某些依赖(主要是.DLL),依赖步行者可以告诉您。如果您进入包含EXE的release文件夹,如果同一目录中存在任何.DLL文件,则尝试运行此程序的任何计算机上都可能需要这些.DLL。