DllImport(“ msvcrt.dll”)在Linux上运行时不起作用

时间:2019-09-20 08:06:52

标签: c# .net linux docker core

我想使用下面的代码使用memcmp函数比较2个字节的数组

[DllImport("msvcrt.dll",EntryPoint = "memcmp", CallingConvention = CallingConvention.Cdecl)]
  static extern int memcmp(byte[] b1, byte[] b2, long count);

当我在Windows上运行我的应用程序时,它运行良好。但是当我在Linux上运行它时,它给出了以下异常

Unable to load shared library 'msvcrt.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libmsvcrt.dll: cannot open shared object file: No such file or directory

下面是docker文件

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app

COPY *.csproj ./
COPY NuGet.Config ./
RUN dotnet restore

# copy everything else and build
COPY . ./

RUN dotnet publish -c Release -o out

# build runtime image
FROM microsoft/dotnet:2.2-runtime

WORKDIR /app
COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "XXX.dll", "YYY.dll"]

请让我知道我该怎么用?

2 个答案:

答案 0 :(得分:2)

您不能仅在Linux上使用“ Windows” DLL。仅仅因为您在Linux上具有.NET Core运行时,并不意味着您可以使用其他平台/ OS上的其他库/可执行文件。

您应该找到一些其他代码,这些代码可以比较两个字节数组或作为基础OS坚持使用Windows。

在这里看看:Comparing two byte arrays in .NET

答案 1 :(得分:0)

@Damien_The_Unbeliever。谢谢你的帮助。 我使用了以下代码

 if (((ReadOnlySpan<byte>)slice).SequenceCompareTo((ReadOnlySpan<byte>)masterSlice) == 0)
                    isEqual = true;