我有一个Visual Studio解决方案(C#
中的所有代码),其结构为:
MySolution
|
+--MyLibrary (DLL library)
|
+--MyMVCSite (MVC 5 site)
|
+--MyConsoleApp (Console app)
MyLibrary
引用了 Emgu.CV DLL,它们是非托管库C#
的一组OpenCV
包装器。我将所有OpenCV dll都“永远复制”到建筑物上的bin目录。
现在问题就出现了。在MyConsoleApp
,program.cs
中,我有代码:
MyLibrary mylib = new MyLibrary();
Image img = Image.FromFile(@"c:\\cat.jpg");
using (MemoryStream ms = new MemoryStream()) {
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
arr = ms.ToArray();
mylib.Process(arr);
}
调用MyLibrary
代码:
public void Process(byte[] buffer) {
PreprocessImage(buffer, true);
}
private Image<Gray, byte> PreprocessImage(byte[] buffer, bool resize) {
Image<Gray, byte> grayImage;
using (MemoryStream mss = new MemoryStream(buffer)) {
Bitmap bmpImage = (Bitmap)Image.FromStream(mss);
Image<Bgr, byte> img = new Image<Bgr, byte>(bmpImage); // <-- Emgu.CV type
// More processing on img
}
}
一切成功。变量img
(通过Emgu.CVs包装函数构建到OpenCV)设置正确,可以在下游处理等。
HOWEVER ,当我尝试使用代码MyConsoleApp
在HomeController.cs
的{{1}}中重复MyMVCSite
完全相同的代码时),我在行上发现运行时错误:HomeController.cs
说明Image<Bgr, byte> img = new Image<Bgr, byte>(bmpImage);
{"Unable to load DLL 'opencv_core300': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"}
MyConsoleApp
引用MyMVCSite
,但控制台应用有效,而MVC应用却没有,尽管使用相同的确切代码来调用MyLibrary
。 有没有人知道会发生什么?我在一个准系统项目中重复了这一点,但行为仍然是同样的事情。
更新
我发布了我的准系统项目,显示了以下行为:https://github.com/brspurri/Test 在这里仍然完全亏损。