C# 找不到OpenCV非托管DLL asp.net

C# 找不到OpenCV非托管DLL asp.net,c#,asp.net,opencv,unmanaged,emgucv,C#,Asp.net,Opencv,Unmanaged,Emgucv,我们正在构建一个web应用程序(C#.NET),它使用Emgu opencv包装器形式的非托管库。我们正在强制构建为32位(x86),并且我们正在使用32位版本的Emgu 所有这些在本地版本上都很有效,但当发布到我们的Web服务器时,openCV Dll无法加载: System.DllNotFoundException Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception

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

所有这些在本地版本上都很有效,但当发布到我们的Web服务器时,openCV Dll无法加载:

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放在单独的目录中,并将 path环境变量中此目录的路径,然后重新启动 网络服务
  • 已测试服务器配置是否允许非托管代码 执行(是)
  • 将非托管Opencv Dll放入system32\inetsrv和 SysWOW64\inetsrv目录
  • 将非托管Opencv Dll放入 前面提到的文件夹
我明白这一点:

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


关于这个问题的最后一篇有用的帖子是在2008年,但是ben还没有提供傻瓜式的解决方案,所以非常感谢所有的帮助

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

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

几天前,我遇到了同样的问题,我尝试了我所知道的一切,但都没有解决问题。EmguCV在本地64位Windows 8 pc上运行良好,但在服务器(Windows Web服务器64位)上运行良好

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

  • 安装<代码> Visual C++ 2010 x86 < /Calp> < /LI> < > >强>修复<强> >代码> Visual C++ 2008 x86运行时安装< /COD> < /LI> 这就解决了问题。我无法解释这是如何发生的,但我很高兴在两天的随机实验后问题得以解决。

    在我的案例“npp32_xx_x.dll”(xx_x是版本号,32是32位体系结构)中解决了问题。 因此,您可以尝试将此dll放入win应用程序的项目输出文件夹和web应用程序中的等效文件夹。
    dll是Nvidia Cuda NPP库。

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


    将来,请在Dependence Walker中查看其他依赖项,并将此dll与父库一起放置。

    该dll是否已在开发机器上注册?i、 e via regsvr32应用程序池是否设置为以32位模式运行?DLL未在开发机器上注册(因此开发和Web服务器上的情况相同),并且应用程序池设置为允许32位应用程序(IIS7)如果您使用Dependes on opencv_core240.dll,web服务器上列出的所有dll是否都可用?Dependes抱怨找不到:MSVCP100.dll MSVCR100.dll,但是在安装VS2010 redist包(x86)后-仍然没有,很不幸,我们最终删除了对此库的任何引用,并使用了一种完全不同的方法。感谢您的回复,但是,我检查了,MSVCRT安装在Web服务器上。在您的bin文件夹中创建一个x86文件夹,并尝试复制opencv dll,如opencv_core240.dll和其他dll。这可能会修复模块未找到错误。之前应该提到过这一点,但我也尝试过,不幸的是,我没有幸运地感谢您,我在OpenCvSharp 2.4中遇到了同样的问题(而不是在本地机器上使用Emgu),这为我解决了问题。