Bootstrap

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

一、前言

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

然后就登录服务器查看容器日志
果然报错“'Gdip’的类型初始化器抛出了一个异常”

代码如下:

/// <summary>
/// 生成验证码
/// </summary>
/// <returns></returns>
public static byte[] ValidateCode(string code)
{
    using (var bitmap = new Bitmap(100, 30))
    {
        using (var gph = Graphics.FromImage(bitmap))
        {
            gph.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height);
            gph.DrawRectangle(new Pen(Color.Black), 1, 1, bitmap.Width - 2, bitmap.Height - 2);
            using (Brush bush = new SolidBrush(Color.SteelBlue))
            {
                gph.DrawString(code, new Font("黑体", 20, FontStyle.Italic), bush, 10, 2);
                var random = new Random();
                // 画线条
                for (int i = 0; i < 5; i++)
                {
;