没有找到asp.net的OpenCV非托管DLL

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

所有这些在本地构建上都很好用,但是当发布到我们的web服务器时,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放在一个单独的目录中,并将路径放在路径环境变量中,然后重新启动webservice。
  • 测试服务器配置是否允许非托管代码执行(是)
  • 将非托管Opencv Dll放在system32 \ inetsrv和SysWOW64 \ inetsrv目录中
  • 将非托管Opencv Dll放在前面提到的文件夹中的子目录’x86’中

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

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

关于这个问题的最后一篇有用的post是在2008年,但是还没有提供任何万无一失的解决方案,所以所有的帮助都非常感谢!

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

在我的情况下,“npp32_xx_x.dll”(xx_x是版本号,32是32位架构)解决了这个问题。 因此,您可以尝试将此dll放入您的项目输出文件夹中以获取应用程序和Web应用程序中的等效文件夹。 该DLL是Nvidia Cuda NPP图书馆。

从您已经执行的错误描述和检查,您似乎没有安装MSVCRT。

几天前我遇到了同样的问题,我在我的知识中尝试了一切,但没有任何帮助解决问题。 EmguCV在我的本地64位Windows 8 pc但服务器(Windows Web Server 64位)中运行良好。

但是在我做了一些真正随机的事情之后问题得到了修复,如下所示:服务器之前安装了Visual C ++ 2008 Runtime,但是

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

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

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

将来在Dependence Walker http://www.dependencywalker.com/看到其他依赖,并将这个dll与父库一起使用。