我在我的计算机上创建了一个使用ODP.net的C#项目,我导入了Oracle.DataAccess的引用 . 在我的电脑上,我尝试连接到数据库并且它正常工作,但是,如果我将我的应用程序的.exe文件复制到另一台计算机,它不起作用,我收到以下错误:
System.IO.FileNotFoundException:无法加载文件或程序集'Oracle.DataAccess,Version = 4.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其依赖项之一 . 该系统找不到指定的文件 . 文件名:'Oracle.DataAccess,Version = 4.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'
为什么C#不封装.exe中所需的所有文件?无论执行计算机是什么,我该怎么做才能使这个程序工作?
4 回答
As of request by Vito,这里是my comment作为答案:
我建议不要使用"classic" ODP.NET,它依赖于系统上额外安装的ODP组件,而是使用purely managed version of ODP.NET .
对于托管的ODP.NET,您可以使用应用程序附带的单个程序集(即DLL)(例如,如果它是ASP.NET应用程序,则在“bin”文件夹中)并且您已完成 .
为了使它完整,我的案例中的连接字符串看起来像:
在我的项目中,托管版本在易用性方面确实是一个巨大的进步 .
您必须在要安装应用程序的每台计算机上安装Oracle数据库版本 .
另一个选择是转到Oracle并下载驱动程序 . Download from Oracle,然后你需要将它们包含在你的项目中,引用这个dll .
请参阅answer我遇到的类似问题 . 主要是这个问题是
oracle.dataaccess.dll
,它依赖于's build platform (32 or 64) and presence of some of it'(如OraOps11w.dll
) . 应检查这些内容以查看是否存在并正确配置 . 部署会很大!当然,如果您在不同应用程序的机器级别(不是应用程序级别)调用库,则应检查它是否也在GAC中注册 .编辑:以最简单的形式:
1 - 您需要在app目录中包含这些dll:
OraOps11w.dll
,oci.dll
,orannzsbb11.dll
和oraociei11.dll
.2 - 您必须添加对
Oracle.DataAccess.dll
的引用 .哪里可以得到这些?
1 - 从您的安装目录 Oracle Client (不是服务器),如果您已经安装了oracle客户端(包括ODP.NET) .
2 - 如果您已安装ODT.NET .
3 - 获取ODP.NET(最好是zip存档,而不是安装包) .
这里有很多可能的原因导致你的问题 . 我首先要复制整个文件夹而不是包含.EXE文件,而不仅仅是.EXE文件本身 . 此文件夹中有一些东西,你的.EXE需要运行 . 另外,我会检查计算机上不依赖于程序Dependency Walker的依赖项 . 如果您使用32位进行开发并尝试在64位上运行,则可能会出错 . 如果您在Windows上开发并尝试在MAC上运行,则可能会出错 . 有很多可以从一台计算机更改为下一台计算机,并且您的代码必须为此做好准备 . 依赖性步行者可以正确告诉您是否't connecting to certain dependancies (mostly .DLL' s) . 如果您进入包含EXE的release文件夹,如果同一目录中存在任何.DLL文件,则尝试运行此程序的任何计算机上都可能需要这些.DLL .