首页 > 解决方案 > 如何修复异常无法加载 DLL 'gdiplus.dll':找不到指定的模块

问题描述

我正在.Net Core 2.1中开发一个服务结构网格应用程序,其中 Can't use System.Drawing.Common in microsoft/dotnet:runtime (windows container)

下面是我的 docker 文件代码

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base

WORKDIR /app

EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build

WORKDIR /src

COPY MS_Upload/MS_Upload.csproj MS_Upload/

RUN dotnet restore MS_Upload/MS_Upload.csproj

COPY . .

WORKDIR /src/MS_Upload

RUN dotnet build MS_Upload.csproj -c Release -o /app

FROM build AS publish

RUN dotnet publish MS_Upload.csproj -c Release -o /app

FROM base AS final

WORKDIR /app

COPY --from=publish /app .

ENTRYPOINT ["dotnet", "MS_Upload.dll"]

我得到的错误:

Unable to load DLL 'gdiplus.dll': The specified module could not be found.
at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromStream(IStream stream, IntPtr& bitmap)
   at System.Drawing.Bitmap..ctor(Stream stream, Boolean useIcm)
   at System.Drawing.Bitmap..ctor(Stream stream)
   at MS_Upload.UserImageMaster.UploadAllChunkImageLibrary(Int32 iPeppyPrintID, Int32 iSourceID, String sAlbumID, Int32 iPickUpOrderID, String sFileName, Int32 iTotalChunk)

标签: c#dockermicroservicesasp.net-core-2.1

解决方案


  • 尝试使用 linux 容器代替,因为 libgdiplus 模块默认情况下未安装在 Windows 容器上,很可能它可以正常工作

  • 使用以下命令(参考)安装 system.Drawings 依赖项:

    运行 apt-get update \ && apt-get install -y --allow-unauthenticated \ libc6-dev \ libgdiplus \ libx11-dev \ && rm -rf /var/lib/apt/lists/*

如果需要使用 Windows 映像,您可以使用Chocolatey在 Windows 容器上安装这些依赖项


推荐阅读