【问题标题】:How to force an ASP.NET Web app to use Oracle DLLs in the BIN folder?如何强制 ASP.NET Web 应用使用 BIN 文件夹中的 Oracle DLL?
【发布时间】:2020-12-16 12:55:22
【问题描述】:

因此,由于某些语法更改,我有一个需要 Oracle 19c 客户端 (4.122.19.1) 的 Web 应用程序,而我们的 Dev IIS 服务器有一个较旧的 4.121.2.0 客户端。

无论如何,我将所有我听说的正确支持 dll 放在应用程序的 Bin 目录中,根据我的所有研究,这些 dll 是: oci.dll ociw32.dll Oracle.ManagedDataAccess.dll Oracle.Web.dll orannzsbb19.dll oraocci19.dll oraocci19d.dll oraociei19.dll oraons.dll OraOps19.dll

这可以在我的 PC 上的 Visual Studio 中完美运行。当我部署到开发 IIS 服务器时(应用程序池在启用 32 位中运行,因为我的电脑在 32 位中运行 IISExpress)有各种 Oracle 连接错误。

现在,在我的 PC 上的 Process Explorer 中,我查看了 IISExpress,我可以看到它已经加载了上述所有 dll,尽管来自 GAC,因为我在本地安装了这个客户端。然而,在开发服务器 Process Explorer 上,在我的 W3WP.exe 进程下,我只看到 Oracle.ManagedDataAccess.dll 和 Oracle.Web.dll,但没有一个支持 DLLS。我相当肯定这些缺失,尤其是 OraOps19.dll,是问题所在。

我在 web.config 中使用了“DLLPath”,它没有任何区别。我总是被告知 Asp.Net 总是 尝试首先从 BIN 加载。然而在这里,我相信它至少部分地忽略了它——无论是在我的 PC 中,它都直接进入 GAC,而在 Dev IIS 服务器中,它确实从 Bin 获得了正确的 .Web 和 .ManagedDataAccess,但没有别的。

我怎样才能让它忘记 Gac 并强制它在 Bin 中找到它需要的任何东西? 谢谢

【问题讨论】:

  • 在Visual Studio中,当你在References下右击DLL时,“Copy Local”的值是多少?此外,您可以选择将“特定版本”设置为 True,然后将“版本”设置为您需要的确切版本。也许值得一试..

标签: c# asp.net oracleclient


【解决方案1】:

dll 被窃听;不允许像这样发布对已签名 dll 的重大更改。解决方法:

假设这些是 100% il 代码(不涉及 C++/clr)

  1. 将 oracle dll 转换为 .il 和 .res 文件
  2. 删除对公钥的所有引用
  3. 将 .il 和 .res 文件转换回 dll
  4. 将您的应用程序与这些 dll 链接起来

现在它不再出现在 GAC 中了。

【讨论】:

  • 谢谢,我现在已经陷入虫洞了。 ilasm 对 Oracle.web.dll .res 和 .IL 文件运行良好,但对 Oracle.ManagedDataAccess.dll 文件失败。我不能在这个深渊中走得更远。我认为(老实说)如果我将数据库迁移到 Sql-Server,我会提前。当使用 Sql-server 时,我从来没有遇到过 .Net 项目的任何问题。我不知道为什么甲骨文必须如此复杂。嗯,我知道为什么——甲骨文的顾问需要得到报酬。
  • @jimo3:这是一个完善的 oracle 错误。不过,最快的方法是交付整个 VM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多