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 上,这个库是用于图像处理操作的关键组件。让我们逐步分析并解决这个问题:

  1. 错误描述:

    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.LinuxSkiaSharp.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

需要注意手动安装和软连接

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐