这里的问题不是 .NET dll,而是非托管 dll。
我试图在一台服务器上运行两个 ASP.NET 应用程序。一种使用 ODP.NET 9.x 的旧版本,而使用最新 ODP.NET 的新版本。我使用 xcopy 部署了最新的 ODP.NET,并为新的 ODP 添加了 PATH 环境变量的路径。现在旧应用程序不起作用(可能会尝试使用新的 dll)。当我从 PATH 变量中删除路径时,新应用程序不起作用。我找到了让它在 Oracle 页面上的 IIS 下的一台服务器上工作的方法,但这没有用。可能是因为我没有安装最新的 ODP.NET,只是复制了它。我得试试看。
Oracle 所说的: 链接:http ://www.oracle.com/technology/tech/windows/odpnet/faq.html
许多 Oracle 应用程序在 Microsoft Internet 信息服务 (IIS) 上运行。以前,IIS 是一个单进程应用程序,无法为使用相同 IIS 实例的每个正在运行的 Web 应用程序分配不同的系统路径。借助 Windows Server 2003 上的 IIS 6,IIS 支持同一实例的多个进程。由于每个应用程序都有自己的 IIS 进程,因此可以为每个 Web 应用程序分配一个不同的系统路径目录,其中包含自己的 Oracle 主目录。
Microsoft 文档提供了有关 IIS 工作进程隔离和应用程序池的信息。
要在同一 IIS 服务器上设置同时运行的多个活动 Oracle Home: 1) 在 Windows Server 2003 上以工作进程隔离模式运行 IIS 6 2) 将 Oracle 客户端的一个版本部署到一个应用程序池,将第二个版本部署到另一个应用程序池. 例如,您可以让一个应用程序池使用 Oracle Client 9.2.0.2 和 ODP.NET 9.2.0.2。Oracle Client 9.2.0.4 和 ODP.NET 9.2.0.4 可以被另一个应用程序池使用。您将无法在同一个应用程序池中使用两个活动的 Oracle Home。每个活动的 Oracle Home 必须位于不同的池中。3) 为每个工作进程设置 DLL 目录以使用适当的 Oracle Home 客户端目录。为此,在每个 ASP.NET 应用程序中,在调用任何 Oracle DLL 之前,在应用程序生命周期的早期调用 SetDllDirectory(directory_name)。SetDllDirectory 输入变量是使用的 ODP.NET 版本的 Oracle Home bin 目录。注意:SetDllDirectory 是一个非托管调用。