c# - 如何修复异常无法加载 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)
解决方案
尝试使用 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 容器上安装这些依赖项
推荐阅读
- python - 如何匹配使用正则表达式来匹配具有特定开始和结束模式的多行文本
- r - 从 r Shiny 中的 actionButton 获取其他命名属性
- java - Maven 和多个客户定制
- c# - 在C#中获取父元素中元素的最后一个xml后代
- elasticsearch - ElasticSearch FileBeat 或 LogStash SysLog 输入推荐
- node.js - 开玩笑抱怨错误......我告诉开玩笑期待
- date - Ionic4: ion-datetime cancelText 和 doneText 不会被覆盖
- javascript - Vue挂载组件失败:未定义模板或渲染函数
- linux - 套接字在哪里存储数据?
- c++ - 设置我的应用程序 api 感知并防止系统使其模糊和错误定位