ASP.NET无法调用dll

时间:2015-08-24 09:55:47

标签: asp.net .net dll iis-7 vb6

我的问题可能已被提出,但任何答案都与我的情况相符。

我需要使用软件的某些功能来创建一个网站(ASP.NET MVC 4)。我已经完成开发我的网站并想在测试环境中测试它(Windows server 2008 - 64bits)。 它与我的开发计算机(Windows 7 - 64位)完美配合。但是在我在IIS上部署之后,我的一个功能无效。

此功能有点特别。它需要一个用VB6写的32位COM(这个dll不能改变)调用另一个dll。当我测试在IIS上部署的网站时,第一个ddl被称为罚款但第二个似乎根本没有被调用。 此dll位于软件的已安装文件中。我在两台计算机上都有相同的版本。

我授权我的应用池使用32位应用。我试图给一些访问我的DLL(COM和互操作),如IUSR,IIS_IUSRS。但似乎没有任何效果。 我已经检查了我的两个dll都正确注册了。 我有点迷茫。有人能帮我吗 ?

PS:对不起我的英语,我可以说,但我的语法很弱。

1 个答案:

答案 0 :(得分:0)

这里有一些建议:

您需要确定应用程序(直接或间接)引用了哪些托管dll,本机dll和lib文件。

对于托管dll,请确保它们位于Web的bin文件夹中。

对于本机dll和.lib文件,请检查这些.dll和.lib文件是否在PATH中。如果没有,你可以将它们复制到那里;或者,您可以将它们放入文件夹并将该文件夹添加到PATH中。然后重新启动VS和IIS(命令“iisreset”)以确保拾取设置。

顺便说一下,将所有文件放在网站的bin文件夹中都无济于事。原因是CLR将文件复制到框架目录下的临时文件夹中并在那里运行Web,但CLR只复制托管的dll(而不是本地文件),因此仍然会出现“找不到模块”错误。

我使用以下示例解决方案重现了此错误

  1. Web1引用托管的c ++项目说“MCpp1.dll”。该项目进一步引用了两个非托管c ++项目,输出结果为“Lib1.lib”和“Lib2.lib”

  2. 如果我将所有这些文件复制到web的bin文件夹中,我会得到“找不到模块错误”的例外。

  3. 我创建一个文件夹说“C:\ Lib”并将“Lib1.lib”和“Lib2.lib”复制到其中并将此文件夹添加到PATH中。我重新启动VS,并运行“IISReset”,因为我有一个IIS网络

  4. 打开VS并请求页面,现在可以使用

  5. 我还联系了CLR / Fusion团队,以了解如何在发生此异常时获取相关模块名称,这对于进行诊断非常有帮助。

    希望这有帮助,

    GODFATHER