dotnetcore/dotnet6 使用SkiaSharp跨平台画图遇到的坑


问题1:dotnetcore项目使用System.Drawing.Common画图时会提示仅在windows上支持,部署到docker上直接提示不支持该类库

这个问题微软官方文档有说明,在各个平台的画图方案,其中在linux平台推荐使用的是SkiaSharp库

问题2:dotnet项目引用nuget包 SkiaShap 画图,在windows运行没问题,跑到docker里直接又报错‘System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies’

这个问题也在网上搜了很多文章,最后自己试出来了,SkiaSharp组件在windows上和linux上的包是不一样的,要想在linux上正常运行,需要在项目中把SkiaSharp包删掉,引用另一个包SkiaSharp.NativeAssets.Linux.NoDependencies

重新编译,windows上运行成功,docker上也能运行成功

问题3:使用SkiaSharp画文字的时候,在windows运行正常,到docker里文字不显示

这是因为docker环境里缺少字体,可以在基础镜像里添加字体或者通过其他方式将字体安装到docker中,可以去网上搜linux或者docker安装字体的教程