2010-03-23 125 views
5

几个月前,我的一位同事在使用XCOPY的服务器上安装ODAC 11.106.21,然后开发了许多使用此客户端的应用程序(没有问题)生产Windows服务器)。在同一台服务器上有两个ODP.NET(ODAC)版本

过去一周,我开发了一个ODAC 11.1.07.20下的应用程序。当我让他在不同的文件夹中使用XCOPY安装这些新的ODAC版本,然后将我的应用程序包含在测试服务器中时,他回答我应该使用ODAC 11.106.21,因为他可能会在他的应用程序中遇到麻烦。

所以我想知道:

1)如果是真的有可能在一台服务器的两个不同版本的ODAC。

2)如果答案是肯定的,我怎样才能确保我的同事不会遇到他的申请问题?

3)如果答案是肯定的,是否需要在服务器中进行某种配置?

谢谢!

回答

9

您可以在同一台计算机上拥有多个ODAC版本,但要注意哪些版本将由每个应用程序使用需要注意几件事情。这实际上适用于所有组件。

  • 在Visual Studio中,如果设置特定版本=真上Oracle.DataAccess.dll,那么该应用程序将不使用其他任何版本,并且必须能够找到它始建反对版本。
  • 无论您是将DLL部署到应用程序还是希望它位于特定位置或GAC中。
  • 有一个特定的搜索顺序用于查找依赖的DLL,它涉及很多,所以请阅读this MSDN topic

简短的回答是,有两种简单的方法,以确保您的应用程序使用你想它Oracle.DataAccess.dll的确切版本(这种方法适用于大多数情况下,其他的都是默认值):

  1. 将特定版本设置为True;
  2. 与您的应用程序一起部署DLL,并让它驻留在应用程序目录中,或者确保该DLL位于GAC中。

在特定情况下,你的同事可能有一个有效的担忧:如果当前安装的应用程序他从海关总署获得Oracle.DataAccess.dll,他并没有具体的版本设置为True,则当你安装新的ODAC,他的应用程序将开始使用它(我假设新的Oracle.DataAccess.dll也将安装在GAC中),

+1

我通过想象“服务器”,他的意思安装,使ASP.NET应用程序可以使用客户端库访问Oracle IIS Windows服务器。 – 2011-03-09 20:50:44

+0

@IgbyLargeman:很好。还有一个问题。 64位客户端,将两个平台版本4.112.2部署到GAC。新的应用程序使用4.112.3为EF功能,这样的想法是'bin'部署它,胜过了奥尔德GAC副本。 Visual Studio只复制本地的32位。接下来的想法是用4.112.3的64位版本覆盖文件。它给了我同样的错误,就好像库仍然不在仓内,就像它仍在使用旧的GAC 64库一样。任何细节或建议? GAC是否可以部署所有4个库(4.112.2 32/64和4.112.3 32/64)?谢谢 – 2012-11-27 20:43:11

4

这里的问题不是.NET dll,而是非托管dll。

我试图在一台服务器上运行两个ASP.NET应用程序。一个使用ODP.NET 9.x,而另一个使用最新的ODP.NET。我使用xcopy部署了最新的ODP.NET,并为新的ODP添加了PATH环境变量的路径。现在旧的应用程序不起作用(可能会尝试使用新的dll)。当我从PATH变量中删除路径时,新的应用程序不起作用。我找到了让它在Oracle页面上的一台服务器上工作的方式,但这种方式无效。也许是因为我没有安装最新的ODP.NET,但只是xcopied它。我将不得不尝试。

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 Home的不同System Path目录。

微软文档提供了有关IIS工作进程隔离和应用程序池的信息。

要设置在同一IIS服务器上同时运行多个活动Oracle主: 1)运行IIS 6的Windows Server 2003 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主目录。每个活动的Oracle Home必须位于不同的池中。 3)设置DLL的目录每个工作进程使用相应的Oracle home客户端目录。要做到这一点,每一个ASP.NET应用程序中,在应用程序生命周期的早期调用SetDllDirectory会(目录名)被称为任何Oracle的DLL之前。 SetDllDirectory输入变量是使用的ODP.NET版本的Oracle Home bin目录。注意:SetDllDirectory是一个非托管调用。

相关问题