【问题标题】:How to correctly deploy Oracle.DataAccess.dll with ASP.NET app如何使用 ASP.NET 应用程序正确部署 Oracle.DataAccess.dll
【发布时间】:2011-10-15 18:48:54
【问题描述】:

当我们第一次将 Oracle.DataAccess.dll 与我们的应用程序一起部署在具有 64/32 位 Windows 的不同服务器上时,我们遇到了一些 x64 / x86 问题。既然我们已经弄清楚了如何让应用程序引用正确的版本,但在部署过程中出现的 .dll 文件仍然存在问题。

情况如下:我的解决方案中有一个项目引用了Oracle.DataAccess。我将“复制本地”属性设置为 False,因为在服务器上,我希望应用程序使用 GAC 或其他文件夹中的 .dll(这将是 64 位版本,而不是开发机器上的 32 位版本)。该dll没有添加到项目bin输出文件夹中,而是复制到web-app bin文件夹中。当我部署到我们的测试服务器时,它使用 bin 文件夹中的 dll,而不是服务器上 Oracle 安装文件夹中的 dll(即 c:\oracle\odp.net\bin\4)

我该怎么做才能使 bin 文件夹中没有 dll?

【问题讨论】:

    标签: asp.net oracle 64-bit web-deployment data-access


    【解决方案1】:

    请记住,它仅使用 dll 作为参考。当代码实际调用内部的函数来连接到 Oracle 时 - .net 使用提供程序类从 oracle 安装目录获取 Oracle 客户端的用法(接口)。

    话虽如此 - 在我们的应用程序中 - 我们只是根据操作系统的位级别在 bin 文件夹中部署正确的版本。我们必须这样做,因为我们的应用程序同时支持 Oracle 和 Sql - 如果 dll 不存在,我们的 Sql 客户端的引用将会中断。

    【讨论】:

    • 不是仅供参考,部署后dll在bin文件夹时,使用这个32bit的dll会崩溃。我需要做的是在网络发布后始终删除文件。我不明白为什么它首先被复制到那里。
    • 仅供参考。默认情况下,所有必需的依赖项都会输出到 bin 文件夹,除非您另外指定。这是在引用的 --> 属性 Copy Local 属性下。将此设置为 false 以防止它在构建期间被复制。
    • 请记住,在编译程序集(首次启动、ngen 等)时,它会在将代码转换为 IL 时尝试建立所有关系。
    【解决方案2】:

    我们发现此问题的一个原因是您的 Web 项目没有直接引用 Oracle.DataAccess.dll,但确实引用了另一个引用它的项目。即使引用项目的 Copy Local 为 false,也会发生这种情况。

    我们发现可行的解决方案是将引用直接添加到您的 Web 项目,然后将其对 Copy Local 的引用设置为 false。

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 1970-01-01
      • 2010-11-11
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多