2017-08-13 284 views
0

我在我的ASP.NET项目中使用EmguCV进行人脸检测。当我从Visual Studio运行该项目时,一切正常。Emgu CV无法在已部署的项目中加载DLL'cvextern'

然后,我通过文件夹配置文件发布了发布版本,然后将此发布的版本上传到smarterasp.net。

应用程序一般工作。但是,当应用程序试图检测图像中的面孔,一个异常被扔:

System.AggregateException: One or more errors occurred. ---> System.TypeInitializationException: The type initializer for 'Emgu.CV.CvInvoke' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
    at Emgu.CV.CvInvoke.RedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata) 
    at Emgu.CV.CvInvoke..cctor() 
    --- End of inner exception stack trace --- 
    at Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels) 
    at Emgu.CV.Image`2.set_Bitmap(Bitmap value) 
    at FaceDetection.FaceDetector.GetFaces(Bitmap img) in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FaceDetection\FaceDetector.cs:line 22 
    at ImageModification.FaceBlurModificator.Modify(Image img) in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\ImageModification\FaceBlurModificator.cs:line 21 
    at FacelessBrowserTT.Controllers.HomeController.<>c__DisplayClass4_0.<PreparePage>b__1() in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FacelessBrowserTT\Controllers\HomeController.cs:line 81 
    at System.Threading.Tasks.Task.InnerInvoke() 
    at System.Threading.Tasks.Task.Execute() 
    --- End of inner exception stack trace --- 
    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 
    at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 
    at FacelessBrowserTT.Controllers.HomeController.<PreparePage>d__4.MoveNext() in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FacelessBrowserTT\Controllers\HomeController.cs:line 86 
---> (Inner Exception #0) System.TypeInitializationException: The type initializer for 'Emgu.CV.CvInvoke' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
    at Emgu.CV.CvInvoke.RedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata) 
    at Emgu.CV.CvInvoke..cctor() 
    --- End of inner exception stack trace --- 
    at Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels) 
    at Emgu.CV.Image`2.set_Bitmap(Bitmap value) 
    at FaceDetection.FaceDetector.GetFaces(Bitmap img) in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FaceDetection\FaceDetector.cs:line 22 
    at ImageModification.FaceBlurModificator.Modify(Image img) in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\ImageModification\FaceBlurModificator.cs:line 21 
    at FacelessBrowserTT.Controllers.HomeController.<>c__DisplayClass4_0.<PreparePage>b__1() in D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FacelessBrowserTT\Controllers\HomeController.cs:line 81 
    at System.Threading.Tasks.Task.InnerInvoke() 
    at System.Threading.Tasks.Task.Execute()<--- 

有趣的是,有是在异常我的本地家庭控制器的路径和其他文件:

D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FacelessBrowserTT\Controllers\HomeController.cs 
D:\Programming\C#Projs\FacelessBrowserTT_DIV_CONTAINER\FaceDetection\FaceDetector.cs 
... 

也许这是原因?为什么在部署的应用程序中存在我的本地路径?

我从来没有部署过一个项目,所以它是100%,这是我犯的一个愚蠢的错误。我究竟做错了什么?

回答

1

简单的答案是,无论你的exe文件是,的EmguCV的DLL和OpenCV的DLL ALL必须是也。开发过程中发生的事情对部署完全没有影响。

我觉得很方便,把EmguCV DLL放到我的EXE文件夹中,并放在一个名为x64的文件夹中放置了所有的OpenCV dll。 x64文件夹与您的exe文件位于相同的文件夹中。

Doug