我有一个非常基本的 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)
我试过用 justdotnet publish IoTCoreCSharp.csproj
和 with编译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).