Emgu CV无法在已部署的项目中加载DLL“cvextern”

我在我的ASP.NET项目中使用EmguCV进行面部检测。 当我从Visual Studio运行项目时,一切正常。

然后我通过Folder profile发布了发布版本,然后将这个发布的版本上传到smarterasp.net。

申请工作一般。 但是当应用程序尝试检测图像中的面时,会抛出exception:

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.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.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.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()<--- 

有趣的是,我的本地路径的Home Controller和其他文件在exception中:

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

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

我之前从未部署过一个项目,所以100%我犯了一些愚蠢的错误。 我究竟做错了什么?

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

我觉得将EmguCV DLL放在我的EXE文件夹中,并在一个名为x64的文件夹中放置所有OpenCV dll是很方便的。 x64文件夹与您的exe在同一文件夹中是ALSo。

道格