OpenCV 未找到非托管 DLL asp.net

本文关键字:DLL asp net OpenCV | 更新日期: 2023-09-27 18:36:31

我们正在构建一个Web应用程序(C# .NET),它使用Emgu opencv包装器形式的非托管库。我们强制构建为 32 位 (x86),并且使用的是 32 位版本的 Emgu。

所有这些都在本地构建上工作得很好,但是当发布到我们的网络服务器时,openCV Dll(s)无法加载:

System.DllNotFoundException
Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
System.TypeInitializationException: The type initializer for 'Emgu.CV.CvInvoke' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata)
   at Emgu.CV.CvInvoke..cctor()
   --- End of inner exception stack trace ---
   at Emgu.CV.CvInvoke.cvCreateImageHeader(Size size, IPL_DEPTH depth, Int32 channels)
   at Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels)
   at Emgu.CV.Image`2.set_Bitmap(Bitmap value)
   at Emgu.CV.Image`2..ctor(Bitmap bmp)

我尝试了在stackoverflow和其他来源上发现的以下东西:

  • 将非托管的 Opencv Dll 放在一个单独的目录中,并将路径环境变量中此目录的路径,然后重新启动网络服务。
  • 已测试服务器配置是否允许非托管代码执行(是)
  • 将非托管的 Opencv Dll 放入 system32''inetsrv 和SysWOW64''inetsrv 目录
  • 普京将非托管的Opencv Dll's放在子目录"x86"中在提到的文件夹之前

我明白这一点:http://msdn.microsoft.com/en-us/library/ms366723.aspx

是所有麻烦的原因,但是我不明白为什么编辑路径变量以包含包含 Dll 的正确路径并不能解决任何问题。

关于此问题的最后一篇有用的帖子是在 2008 年,但是还没有提供万无一失的解决方案,因此非常感谢所有帮助!

OpenCV 未找到非托管 DLL asp.net

确保 tbb.dll 也在路径中,因为opencv_core240.dll依赖于此。你可以在opencv/build/common/tbb下找到tbb.dll。

在我的

例子中"npp32_xx_x.dll"(xx_x是版本号,32是32位架构)解决了这个问题。因此,您可以尝试将此dll放入您的项目中,用于win应用程序的放置文件夹和Web应用程序中的等效文件夹。dll是Nvidia Cuda NPP Library。

从错误描述和已执行的检查来看,您似乎尚未安装 MSVCRT。

几天前我遇到了同样的问题,我尝试了我所知道的一切,但没有任何帮助解决问题。EmguCV在我的本地64位Windows 8电脑中工作正常,但服务器(Windows Web Server 64位)。

但是在我做了一些真正随机的事情后,问题得到了解决,如下所示:服务器以前安装了 Visual C++ 2008 运行时,但再次

  1. 我安装了Visual C++ 2010 x86.
  2. 修复Visual C++ 2008 x86 Runtime installation

这解决了问题。我无法解释这是怎么发生的,但我很高兴经过两天的随机实验后问题解决了。

要解决此问题,请将nvcuda.dll放在Web服务器上/bin文件夹中。确保nvcuda.dll必须是 x86 体系结构与服务器相同,或者如果 Web 服务器具有 x64 体系结构,则为 x64

将来在依赖沃克http://www.dependencywalker.com/中看到其他依赖项,并将此 dll 与父库放在一起。