dotnetcore/dotnet8 使用SkiaSharp跨平台画图遇到的坑
startup.cs需要注释掉startip.cs里的app.UseHttpsRedirection()。保险一点的话,应该删除launchSettings.json中applicationUrl属性内的所有https网址。再运行项目即以http方式启动。''' VS2019版本中还需在项目属性中取消勾选HTTPS设置,不过在VS2022的项目属性中没有找到类似选项。
Failed to determine the https port for redirect
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] Failed to determine the https port for redirect.
For the https redirection warning, I recommend simply removing the https redirection policy from the startup.cs
file which is typically defined via app.UseHttpsRedirection();
unless you're actually using this policy for your container and in this case you'd need to actually
需要注释掉startip.cs里的app.UseHttpsRedirection()。
保险一点的话,应该删除launchSettings.json中applicationUrl属性内的所有https网址。再运行项目即以http方式启动。
''' VS2019版本中还需在项目属性中取消勾选HTTPS设置,不过在VS2022的项目属性中没有找到类似选项。
dotnetcore/dotnet6 使用SkiaSharp跨平台画图遇到的坑
at SkiaSharp.SkiaSharpVersion.CheckNativeLibraryCompatible(Version minSupported, Version current, Boolean throwIfIncompatible) at SkiaSharp.SkiaSharpVersion.CheckNativeLibraryCompatible(Boolean throwIfIncompatible) at SkiaSharp.SKObject..cctor() --- End of inner exception stack trace --- at SkiaSharp.SKObject..ctor(IntPtr handle, Boolean owns) at SkiaSharp.SKSurface..ctor(IntPtr h, Boolean owns) at SkiaSharp.SKSurface.GetObject(IntPtr handle) at SkiaSharp.SKSurface.Create(SKImageInfo info, Int32 rowBytes, SKSurfaceProperties props) at SkiaSharp.SKSurface.Create(SKImageInfo info) at PersonalSide.API.Captcha.CaptchaGenerator.GenerateCode(String code, Int32 width, Int32 height) in F:\Merchant\merchant202409\博客后台\PersonalSide\PersonalSide\PersonalSide.API\Captcha\CaptchaGenerator.cs:line 39
报错
/opt/test/libSkiaSharp.so: cannot open shared object file: No such file or directory /opt/test/liblibSkiaSharp.so: cannot open shared object file: No such file or directory /opt/test/libSkiaSharp: cannot open shared object file: No such file or directory /opt/test/liblibSkiaSharp: cannot open shared object file: No such file or directory
根据你提供的日志,问题出在无法加载 SkiaSharp 库 libSkiaSharp.so
上,这个库是用于图像处理操作的关键组件。让我们逐步分析并解决这个问题:
-
错误描述:
unknownSystem.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception. ---> System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies.
这表明在尝试初始化
SKImageInfo
时发生了异常,因为无法找到所需的共享库libSkiaSharp.so
。
问题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安装字体的教程
.net core linux下使用SkiaSharp实现图形验证码
linux下使用c#自带的获取验证码需要安装图形处理插件比较麻烦 有的需要将字体放入项目目录
原因是 Linux 的版本众多,大家都很喜欢自己定义,这让 SkiaSharp 不知道包含哪个版本才是能让大家都开心的,如官方文档 所讲的故事
解决的方法是再安装上 SkiaSharp.NativeAssets.Linux
或 SkiaSharp.NativeAssets.Linux.NoDependencies
库即可
如在 csproj 上添加以下代码用来安装
<ItemGroup> <PackageReference Include="SkiaSharp" Version="2.88.0" /> <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.0" /> </ItemGroup>
dotnet8部署linux
需要注意手动安装和软连接
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)