首页 文章

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

提问于
浏览
1

我在我的计算机上创建了一个使用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 回答

  • 1

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

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

    对于托管的ODP.NET,您可以使用应用程序附带的单个程序集(即DLL)(例如,如果它是ASP.NET应用程序,则在“bin”文件夹中)并且您已完成 .

    为了使它完整,我的案例中的连接字符串看起来像:

    <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" />
    

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

  • 1

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

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

  • 0

    请参阅answer我遇到的类似问题 . 主要是这个问题是 oracle.dataaccess.dll ,它依赖于's build platform (32 or 64) and presence of some of it'(如 OraOps11w.dll ) . 应检查这些内容以查看是否存在并正确配置 . 部署会很大!当然,如果您在不同应用程序的机器级别(不是应用程序级别)调用库,则应检查它是否也在GAC中注册 .

    编辑:以最简单的形式:

    1 - 您需要在app目录中包含这些dll: OraOps11w.dlloci.dllorannzsbb11.dlloraociei11.dll .

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

    哪里可以得到这些?

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

    2 - 如果您已安装ODT.NET .

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

  • 1

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

相关问题