在一个纳米级的Docker容器中运行带有OpenCV的.NET Core 2.0 C#模块

时间:2018-04-16 00:12:42

标签: opencv .net-core docker-for-windows docker-windows azure-iot-edge

我有一个非常基本的C#.NET Core 2.0应用程序,它使用OpenCV的几个非常基本的功能作为概念证明。

我试图在纳米服务器容器中运行它,最终将其部署为IoT Edge模块,但是我收到错误消息,说它无法找到DLL文件。

Unhandled Exception: System.TypeInitializationException: The type initializer for 'OpenCvSharp.NativeMethods' threw an exception. --->
System.DllNotFoundException: Unable to load DLL 'OpenCvSharpExtern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我尝试使用dotnet publish IoTCoreCSharp.csprojdotnet publish IoTCoreCSharp.csproj --runtime win10-x64 --configuration Debug --force进行编译,两者都没有运气。

我的Docker文件如下所示:

FROM microsoft/dotnet:2.0.0-runtime-nanoserver-1709

ARG EXE_DIR=.

WORKDIR /app

COPY $EXE_DIR/ ./

COPY system32_opencvsharp_deps/ C:/Windows/System32

CMD ["dotnet" "IoTCoreCSharp.dll"]

system32_opencvsharp_deps包含avicap32.dll,avifil32.dll,msacm32.dll,msvfw32.dll和vcruntime140.dll。 OpenCvSharpExtern.dll位于我们正在执行的DLL文件的目录的根目录中。

该程序在基于windowsservercore的映像中运行,并且在我的开发机器上完全安装了.NET,但是这种映像不能在我们需要的Windows 10 IoT Core上运行。

尝试在IoT Core上运行时出错:

c:\Program Files\docker\docker.exe: Error response from daemon: container
e9da3baa806f161153fdb7f60a9401a5ff46c32a959499cbe0bd822b1fc0dda3 encountered an error during Start: failure in a
Windows system call: The compute system exited unexpectedly. (0xc0370106).

1 个答案:

答案 0 :(得分:0)

您可以参考this sample。此示例演示如何在具有microsoft / dotnet-framework的Windows容器中运行OpenCVSharp:4.7.1-windowsservercore-1709作为基本映像。它表示您遇到的问题相同。