Iis ISAPI扩展加载错误的DLL

Iis ISAPI扩展加载错误的DLL,iis,httpmodule,isapi,dll,setdlldirectory,Iis,Httpmodule,Isapi,Dll,Setdlldirectory,IIS加载旧版ISAPI扩展和IIS模块,两者都使用具有相同名称的DLL,但是这些DLL不同(针对不同版本的第三方链接)。到目前为止,应该没有问题,每个组件(扩展和模块)都驻留在各自的文件夹中,每个组件都有自己的DLL版本,但是当IIS启动工作进程并且以某种方式加载扩展和模块时,扩展尝试从模块的文件夹加载DLL。我检查了模块的代码,发现SetDllDirectory的使用影响了整个过程。瞧,这就是问题所在,我说。摆脱此调用后(替换为LoadLibraryEx,带有符合我需要的DLL搜索标志),问

IIS加载旧版ISAPI扩展和IIS模块,两者都使用具有相同名称的DLL,但是这些DLL不同(针对不同版本的第三方链接)。到目前为止,应该没有问题,每个组件(扩展和模块)都驻留在各自的文件夹中,每个组件都有自己的DLL版本,但是当IIS启动工作进程并且以某种方式加载扩展和模块时,扩展尝试从模块的文件夹加载DLL。我检查了模块的代码,发现SetDllDirectory的使用影响了整个过程。瞧,这就是问题所在,我说。摆脱此调用后(替换为LoadLibraryEx,带有符合我需要的DLL搜索标志),问题仍然存在。最后,我发现自己为这两个DLL都指定了唯一的名称,这显然(或不是)解决了问题。然而,这并不是一个干净优雅的解决方案。有人知道为什么IIS表现出如此奇怪的行为吗

运行Win 2008、IIS7.5、ISAPI扩展——NealC++、VC2010、IIS模块——NealC++、VS2010,上面有问题的DLL—C++/CLI,与.NET3.5第三方程序集连接。 everything is x64

“您不能在同一进程中拥有两个同名的“经典”DLL,除非它们经过设计以支持SxS” 这与这里所说的有关:

EDIT001: 5年后:)根本原因是IIS加载内容的方式。当工作进程启动IIS模块时,在任何情况下都会加载内容,然后加载ISAPI。因此,如果两者都使用相同的DLL(例如,这两个具有公共基础结构实现),则IIS模块将首先加载,而ISAPI将必须使用由模块加载的DLL。因此,您最好将IIS模块和ISAPI的共享DLL保持在同一版本。

Ok,MSDev的官方回应:“除非设计为支持SxS,否则在同一进程中不能有两个同名的“经典”DLL”