今天在Docker环境布置项目,在登录页面中有一个功能就是需要后端动态绘制一个验证码图片,防止前端通过机器或爬虫工具模拟自动登录。
在开发机器上(windows10)调试正常,但是部署到centos7容器(容器基础环境mcr.microsoft.com/dotnet/aspnet:3.1)中,验证码一直显示不出来,通过前端调试发现请求500(服务器内部错误)

查看相关资料发现.Net Core本身不包括和图片有关的Image、Bitmap等类型。用过.Net框架的同学应该都知道Bitmap、Image是放在System.Drawing.dll中,通过COM引用就可使用。
但在.Net Core中对于图片的操作在我们开发中很常见,比如:生成验证码、二维码等等。在.NET Core 的早期版本中,也有.NET社区开发者实现了一些 System.Drawing的Image等类型实现的组件,比如CoreCompat.System.DrawingZKWeb.System.Drawing等。后来微软官方提供了一个组件System.Drawing.Common实现了System.Drawing的常用类型,以Nuget 包的方式发布的。然后我当前的项目的验证码绘制就是使用的微软官方的System.Drawing.Common

System.Drawing.Common组件提供对GDI+图形功能的访问。它是依赖于GDI+的,那么在Linux上它如何使用GDI+,因为Linux上是没有GDI+的。Mono团队使用C语言实现了GDI+接口,提供对非Windows系统的GDI+接口访问能力(个人认为是模拟GDI+,与系统图像接口对接),这个就是libgdiplus。进而可以推测 System.Drawing.Common 这个组件实现时,对于非Windows系统肯定依赖了ligdiplus这个组件。如果我们当前系统不存在这个组件,那么自然会报错,找不到它,安装它即可解决。

然后我在DockerFile中增加

RUN apt-get update -y
RUN apt-get install -y libgdiplus
RUN apt-get clean
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

重新打包镜像

重新运行就解决了

记一次.Net Core通过GDI+在CentOS 7(Docker)环境中绘图报错The type initializer for ‘Gdip‘ threw an exception的问题及处理方式相关推荐

  1. .Net Core通过NPOI在CentOS 7(Docker)环境中导出Excel报错The type initializer for ‘Gdip‘ 的问题

    一.前言 今天在AspNetCore5.0环境中做了一个导出Excel的功能,在开发机器上(windows10)调试正常,但是部署到centos7容器(容器基础环境mcr.microsoft.com/ ...

  2. .net core linux环境下导出到excel报The type initializer for ‘Gdip‘ threw an exception.异常

    .net core linux环境下导出到excel报The type initializer for 'Gdip' threw an exception.异常 一.安装一下包: yum -y ins ...

  3. ASP.Net Core The type initializer for 'Gdip' threw an exception

    ASP.NET Core项目部署在Linux下可能会出现GDI错误 The type initializer for 'Gdip' threw an exception 解决方案:创建 libdl 的 ...

  4. .net Core 在 CentOS7下,报The type initializer for ‘Gdip‘ threw an exception.异常

    .net Core 在 CentOS7下,报The type initializer for 'Gdip' threw an exception.异常 参考文章: (1).net Core 在 Cen ...

  5. .net Core 在 CentOS7下,报The type initializer for 'Gdip' threw an exception.异常

    .net Core允许在 Centos7 上,使用 System.Draw.Common类库时,报以下错误: "Class":"System.TypeInitializa ...

  6. .net Core 6.0 部署到欧拉(Linux)系统上,“The type initializer for ‘Gdip‘ threw an exception” 报错的解决方案

    前言 "The type initializer for 'Gdip' threw an exception" 报错的根本原因, 是因为我们使用了"System.Draw ...

  7. .net Core 2.1 在 CentOS7下,运行含图片处理时发生异常,报The type initializer for ‘Gdip‘ threw an exception.异常

    运行含图片处理时发生异常: The type initializer for 'Gdip' threw an exception. 解决方法: 一.安装一下包: yum -y install auto ...

  8. net core站点部署到ubuntu,错误信息System.TypeInitializationException: The type initializer for 'Gdip' threw an

    问题 aspNetCore 使用验证码,unbuntu部署报错 ystem.TypeInitializationException: The type initializer for 'Gdip' t ...

  9. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

最新文章

  1. ognl 表达式常用表达式语言
  2. C++什么是内存泄漏
  3. 使用Visual Studio 创建可视Web Part部件
  4. Java--对象内存布局
  5. python常用单词自由且开放_python常用英语单词词汇 unit7
  6. 【网站建设】简单一行代码,为网站开启深色模式支持
  7. 服务器简历共享文件,通过 NFS 实现服务器目录共享
  8. 树莓派入门教程 - 0 - 准备篇 - 0.1 第一次开机
  9. GAN(生成对抗神经网络 )的一点思考
  10. html embed函数爬取,HTML DOM Embed用法及代码示例
  11. opencv 曲线拟合
  12. 信息奥赛课课通(C++)p139-例3幸运数的划分
  13. 2017.9.26 noip模拟赛 总结
  14. 计算机组成原理——计算机系统概述
  15. uni-app app平台微信支付
  16. 25-陈庆祥-词法分析
  17. Unity3D 角色控制器 Character Controller
  18. Hieroglyph3(基于DirectX 11的开源渲染引擎) 框架分析
  19. 计算机连接游戏手柄,电脑如何使用手柄_电脑怎么连手柄打游戏-系统城
  20. 申请微信公众号的一些流程和注意

热门文章

  1. hashmap中的key是有序的么_HashMap是无序的
  2. hashmap有序吗?
  3. 将byte[] 转换成图片
  4. MySQL查询连续的时间段
  5. Codis命令快速查询
  6. cmd调取windows组件的dos命令大全和常用网络工具,及Linux系统下命令大全
  7. 数星星 ← 树状数组
  8. Scala 中的 特质(trait)
  9. 技术工艺 | FPC和PCB有哪些区别?
  10. eve-ng导入华为路由器镜像