【发布时间】:2018-04-16 00:12:42
【问题描述】:
我有一个非常基本的 C# .NET Core 2.0 应用程序,它使用 OpenCV 的几个非常基本的功能作为概念证明。
我试图在 nanoserver 容器中运行它,最终部署为 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.csproj 和 dotnet 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).
【问题讨论】:
-
您的代码是否在服务器核心映像中工作?
-
@GregorySuvalian 是否有基于服务器核心的 dotnet 映像供我尝试?
-
没有,但您可以使用基于 servercore 的映像并在其上安装 dotnet core (docs.microsoft.com/en-us/dotnet/core/tools/…)
-
我正在尝试创建一个基于 windowsservercore 的新图像以检查它是否有效,但下载需要很长时间,我会在它执行某些操作时报告。谢谢。
-
是的,它确实在 windowsservercore 映像中工作。但是 windowsserver core 不能在 windows 10 iot core 上运行。
标签: opencv .net-core docker-for-windows azure-iot-edge docker