我在计算机上创建了一个使用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中所需的所有文件?无论执行计算机是什么,我该怎么做才能使这个程序工作?
答案 0 :(得分:1)
您必须在要安装应用程序的每台计算机上安装Oracle数据库版本。
另一个选择是转到Oracle并下载驱动程序。 Download from Oracle,然后你需要将它们包含在你的项目中,引用这个dll。
答案 1 :(得分:1)
请参阅answer我遇到的类似问题。主要是这个问题是关于oracle.dataaccess.dll
,它是构建平台(32或64)并且存在一些依赖关系(如OraOps11w.dll
)。应检查这些内容以查看是否存在并正确配置。部署会很大!当然,如果您在不同应用程序的机器级别(非应用程序级别)调用库,则应检查它是否也在GAC中注册。
编辑:以最简单的形式:
1 - 您需要在应用目录中拥有这些dll:OraOps11w.dll
,oci.dll
,orannzsbb11.dll
和oraociei11.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。