我目前正在尝试基本上公开一个本地C ++库,我没有代码,作为WebApi。为此,我创建了一个托管C ++包装器库,它允许我的Web应用程序与本机代码进行通信。
所以项目的依赖关系看起来像这样:
我现在的问题是,我总是收到错误消息"无法加载文件或程序集[ManagedWrapper.dll]或其中一个依赖项。找不到指定的模块。"
由于托管包装器库位于同一解决方案中,因此它被列为引用,甚至被复制到卷影副本,因此我认为问题在于本机依赖关系。我很清楚,在ASP.NET中加载本机DLL存在问题,因为不会对它们进行卷影复制,也无法将它们添加到GAC中。我试图通过将它们添加到我的%PATH%来解决这个问题,但错误仍然存在。 Dependency walker没有显示任何其他依赖项,并且将原生DLL添加到system32 / inetsvr修复了问题,但这显然不是应该这样做的方式。
所以这里我的问题:PATH变量不起作用的原因是什么? (还有其他方法可以让它发挥作用吗?)
使用loadLibrary
加载绝对路径并不是一个可行的解决方案,因为我对本机C ++库没有任何影响,以及它将如何加载更多依赖项。
答案 0 :(得分:0)
我认为我找到了自己的问题解决方案,并希望这也可以帮助其他人:
我的本机DLL位于我的主文件夹中的某个位置。将它们移动到一个更容易访问的地方,即C:\ temp \,并将此文件夹添加到路径似乎可以解决问题。我的猜测是,这是一个基于权限的问题,即使我之前在我的主目录中为该文件夹添加了IUSR的权限。