我有一个第三方dll,当我在我的本地VS中使用时,它完美无缺地运行。这个第三方dll带有32位和64位dll安装文件。我运行64位安装程序,system32文件夹有所需的DLL。我的本地项目可以毫不费力地调用这些dll。
当我尝试在64位Windows 2012 R2测试服务器上的IIS 7.0上托管网站时,我收到以下错误: 无法加载DLL“3rdparty.dll”:找不到指定的模块。 (HRESULT异常:0x8007007E)
要解决此问题,我尝试卸载64位并安装了32位dll,而SysWow64需要dll,并且没有收到任何错误。
我检查了system32是否有那些dll但是没有,只有syswow64有dll的。任何人都可以告诉我为什么32位dll在服务器上工作而64位在我本地工作?
另外,在不同的机器上进行尝试时,我发现32位安装程序在所有机器上都有问题但64位有问题。
当我在测试服务器上的IIS 7.0的相同应用程序池中托管不同文件夹上的同一网站的副本时,添加了这种陌生感。我在一个网站上收到错误,而另一个网站没有加载dll所需的问题。这两个网站在使用的IIS用户方面都有一切相同,访问权限只是区别在于它们处于不同的文件夹结构下。
还有什么方法可以引用第三方dll来使用特定路径,而不是信任网站项目中的system32和syswow64文件夹。
答案 0 :(得分:0)
正如Cyril所提到的,我使用Procmon跟踪asp.net网站寻找第三方dll的位置。在检查时发现第三方dll正在查看SysWow64文件夹而不是预期的System32文件夹。发生这种情况是因为复制之前的网站是在32位版本上编译的,因此复制版本正在寻找32位而不是64位。这使它表现得与众不同。但是,我需要了解.net编译器如何决定使用哪个版本来解决这个混乱的问题。
以下问题也有所帮助:Dll in both the bin and the gac, which one gets used?