我正在使用Heroku部署我的asp.net Core Web API,在调用Image.FromStream(memoryStream)函数时发生此错误:
系统。无法加载共享库'libgdiplus'或其依赖项之一。为了帮助诊断加载问题,可以考虑设置LD_DEBUG环境变量:liblibgdiplus: cannot open shared object file: No such file or directory
即使在Docker文件中使用RUN apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev
,这个错误仍然只在Heroku中发生(它不会在localhost中发生)。
我找到了解决。net 6在Linux (heroku用来部署的操作系统)中不支持System的方法。绘图库。所以我决定改变这个系统。绘图库由imagessharp库。您可以在这里找到有关更改的信息:Microsoft Learn - System.Drawing.Common仅支持Windows
如上所述,您所要做的就是添加到dockerfile
RUN apt-get update
&& apt-get install -y
libc6-dev
libgdiplus
libx11-dev
&& rm -rf /var/lib/apt/lists/*
并添加到项目根文件名为:runtimeconfig.template.json
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
From Microsoft Learn | System.Drawing.Common config switch移除了它的状态:
老行为新行为在。net 6之前,使用System.Drawing.Common包不能不会产生任何编译时警告,也不会产生任何运行时异常抛出。在。net 6中,你可以设置System.Drawing.EnableUnixSupport运行时配置设置重新启用非windows支持。
从。net 7开始,System.Drawing.EnableUnixSupport开关有被删除,你可以不再使用System.Drawing.Common