ASP.NET WebApi中未从PATH加载的本机DLL

时间:2018-02-01 09:08:49

标签: c++ asp.net .net iis

我目前正在尝试基本上公开一个本地C ++库,我没有代码,作为WebApi。为此,我创建了一个托管C ++包装器库,它允许我的Web应用程序与本机代码进行通信。

所以项目的依赖关系看起来像这样:

  • Web应用程序(ASP.NET)
    • 托管C ++包装器
      • 原生C ++库(DLL)
        • 原生依赖项(DLL)

我现在的问题是,我总是收到错误消息"无法加载文件或程序集[ManagedWrapper.dll]或其中一个依赖项。找不到指定的模块。"

由于托管包装器库位于同一解决方案中,因此它被列为引用,甚至被复制到卷影副本,因此我认为问题在于本机依赖关系。我很清楚,在ASP.NET中加载本机DLL存在问题,因为不会对它们进行卷影复制,也无法将它们添加到GAC中。我试图通过将它们添加到我的%PATH%来解决这个问题,但错误仍然存​​在。 Dependency walker没有显示任何其他依赖项,并且将原生DLL添加到system32 / inetsvr修复了问题,但这显然不是应该这样做的方式。

所以这里我的问题:PATH变量不起作用的原因是什么? (还有其他方法可以让它发挥作用吗?)

使用loadLibrary加载绝对路径并不是一个可行的解决方案,因为我对本机C ++库没有任何影响,以及它将如何加载更多依赖项。

1 个答案:

答案 0 :(得分:0)

我认为我找到了自己的问题解决方案,并希望这也可以帮助其他人:

我的本​​机DLL位于我的主文件夹中的某个位置。将它们移动到一个更容易访问的地方,即C:\ temp \,并将此文件夹添加到路径似乎可以解决问题。我的猜测是,这是一个基于权限的问题,即使我之前在我的主目录中为该文件夹添加了IUSR的权限。