我正在尝试在带有mono的ubuntu Docker容器中运行C#应用程序。应用程序在Windows环境中正确运行。我刚刚将所有目录复制到docker卷。
我可以使用以下命令构建应用程序,而不会出现错误或警告:
msbuild CSharpSampleLSV2.csproj / t:Rebuild / p:Configuration = Release / P:平台= “86”
但是当我尝试使用以下命令运行应用程序时:
MONO_LOG_LEVEL = debug mono CSharpSampleLSV2.exe
我遇到了这样的错误:
单声道:DllImport错误加载库'P_LSV2.DLL':'P_LSV2.DLL: 无法打开共享对象文件:没有这样的文件或目录'。
我不明白为什么会出现这个错误。这些库位于与Windows环境相同的位置。
如果需要更多信息,我会提供。
答案 0 :(得分:1)
在{0}中提到的P_LSV2.DLL
库的扩展名“.dll”暗示这是您正在尝试对其进行pinvoke的特定于Windows的本机库(DllImport
建议使用pinvoke)。 Linux本机库几乎总是具有扩展名“.so”。因此,当您使用Linux时,您正尝试从为Windows编译的本机库中调用某些内容 - 这不起作用。
.NET编译成IL(中间语言),然后该语言在运行时编译为本代码执行的平台的本机代码。与此相反 - 本机库包含已编译的目标平台代码。因此,在Linux上无法使用为Windows平台编译的本机库。
所以你需要在某处获取为linux编译的库。如果没有这样的版本并且源代码也不可用(从源代码中你可以尝试为linux编译,虽然这可能并不容易) - 你运气不好。