最近在开发一个项目,需要对图片进行处理,比如生成缩略图、生成图片验证码、图片添加水印等功能,项目使用.netcore6.0开发,开发系统使用的云桌面(win10系统),由于是云桌面系统,无法在开发时使用docker进行调试,docker desktop无法启动,原因是云桌面系统禁止了系统更新,导致安装了docker desktop需要更新系统某些功能失败,所以docker desktop无法启动,不知道大家有没有遇到过这个问题,有没有解决办法,可以告诉我一下。由于docker desktop无法启动,所以也无法在本地模拟docker运行,本地开发一直都是使用的vs2022自带的IISExpress进行的调试和开发,此处对系统进行了详细说明就是为了说明为什么在开发过程中为什么没有遇到图片处理的问题,因为使用的windows系统进行的调试,一直没有出现问题,直到发布了测试版本到docker(liunx)上面,才发现了问题,图片上传不了,一直报错。错误信息如下:
System.TypeInitializationException: The type initializer for 'Gdip' threw an exception.
—> System.DllNotFoundException: Unable to load shared library 'libgdiplus' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibgdiplus: cannot open shared object file: No such file or directory
错误大致意思就是加载libgdiplus组件失败,确实我刚部署上去时没有安装这个组件,Liunx系统是需要单独安装这个组件,于是我按百度搜索到的方法安装了组件,但是安装完成后,问题仍然还在,报的错误还是一样。于是继续查询解决办法,但是各种方法都试了,问题仍然没有解决。最后我找到一篇文章,内容如下 :
.NET 6之前
在Linux服务器上安装 libgdiplus 即可解决,安装方法可参考原文或者在百度搜索,由于本人使用的是.net6,没有成功,具体方法不再说明
NET 6及以后
由于官方不再支持在非Windows环境使用libgdiplus,需要单独开启运行时环境支持
处理步骤
- 按照.NET 6之前的方案安装 libgdiplus
- runtimeconfig.json配置文件中新增"System.Drawing.EnableUnixSupport": true,这句代码加在runtimeOptions结点下面的,configProperties结点下面