【问题标题】:ASP.NET failing to call a dllASP.NET 调用 dll 失败
【发布时间】:2015-08-24 09:55:46
【问题描述】:

我的问题可能已经被问过了,但任何答案都符合我的情况。

我需要做一个具有软件某些功能的网站(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:对不起我的英语,我会说,但我的语法很弱。

【问题讨论】:

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


    【解决方案1】:

    这里有一些建议:

    您需要弄清楚您的应用程序(直接或间接)引用了哪些托管 dll、本机 dll 和 lib 文件。

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

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

    顺便说一句,将所有文件放在 web 的 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 并请求一个页面,它现在可以工作了

    我也联系了CLR/Fusion团队,请教在异常发生时如何获取相关模块名,应该对诊断很有帮助。

    希望这会有所帮助,

    教父

    【讨论】:

    • 我仍然不是很熟悉(我正在做我的第一个 ASP.NET 网站)。但是为什么它在我的开发机器上运行而不是在我的测试机器上运行呢?在我的开发机器上,我不需要在 PATH 中添加任何内容。
    • 我还有一个问题。您谈论的是本机和托管 dll。我不知道,所以我做了一些挖掘,但我不确定我是否理解正确。你能详细解释一下两者之间的区别吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2020-10-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多