记一次.Net Core通过GDI+在CentOS 7(Docker)环境中绘图报错The type initializer for ‘Gdip‘ threw an exception的问题及处理方式
今天在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.Drawing
、ZKWeb.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的问题及处理方式相关推荐
- .Net Core通过NPOI在CentOS 7(Docker)环境中导出Excel报错The type initializer for ‘Gdip‘ 的问题
一.前言 今天在AspNetCore5.0环境中做了一个导出Excel的功能,在开发机器上(windows10)调试正常,但是部署到centos7容器(容器基础环境mcr.microsoft.com/ ...
- .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 ...
- 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 的 ...
- .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 ...
- .net Core 在 CentOS7下,报The type initializer for 'Gdip' threw an exception.异常
.net Core允许在 Centos7 上,使用 System.Draw.Common类库时,报以下错误: "Class":"System.TypeInitializa ...
- .net Core 6.0 部署到欧拉(Linux)系统上,“The type initializer for ‘Gdip‘ threw an exception” 报错的解决方案
前言 "The type initializer for 'Gdip' threw an exception" 报错的根本原因, 是因为我们使用了"System.Draw ...
- .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 ...
- net core站点部署到ubuntu,错误信息System.TypeInitializationException: The type initializer for 'Gdip' threw an
问题 aspNetCore 使用验证码,unbuntu部署报错 ystem.TypeInitializationException: The type initializer for 'Gdip' t ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
最新文章
- ognl 表达式常用表达式语言
- C++什么是内存泄漏
- 使用Visual Studio 创建可视Web Part部件
- Java--对象内存布局
- python常用单词自由且开放_python常用英语单词词汇 unit7
- 【网站建设】简单一行代码,为网站开启深色模式支持
- 服务器简历共享文件,通过 NFS 实现服务器目录共享
- 树莓派入门教程 - 0 - 准备篇 - 0.1 第一次开机
- GAN(生成对抗神经网络 )的一点思考
- html embed函数爬取,HTML DOM Embed用法及代码示例
- opencv 曲线拟合
- 信息奥赛课课通(C++)p139-例3幸运数的划分
- 2017.9.26 noip模拟赛 总结
- 计算机组成原理——计算机系统概述
- uni-app app平台微信支付
- 25-陈庆祥-词法分析
- Unity3D 角色控制器 Character Controller
- Hieroglyph3(基于DirectX 11的开源渲染引擎) 框架分析
- 计算机连接游戏手柄,电脑如何使用手柄_电脑怎么连手柄打游戏-系统城
- 申请微信公众号的一些流程和注意