.net 6 部署在Docker环境,报错The type initializer for ‘Gdip’ threw an exception

项目上需要使用 Spire.Pdf组件的PdfPageBase对象,对上传的发票进行解析,结果引发了下面的运行时异常:

System.TypeInitializationException : The type initializer for ‘Gdip’ threw an exception.

—- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.

一开始没有在意上面的地址,翻(多)阅(走)资(弯)料(路)发现,Linux环境下需要安装 libgdiplus,libc6-dev组件,但是这些组件在docker镜像打包生成的时候就已经添加进来了。

后来跌跌撞撞又回到了起点,官方文档表示

System.Drawing.Common NuGet 包现在被归为 Windows 特定的库。 在为非 Windows 操作系统编译时,平台分析器会在编译时发出警告。

在非 Windows 操作系统上,除非设置了运行时配置开关,否则将引发 TypeInitializationException 异常,其中 PlatformNotSupportedException 作为内部异常。

也给出了修改建议

若要将这些 API 用于跨平台应用,请迁移到以下库之一:

或者,可通过将 runtimeconfig.json 文件中的 System.Drawing.EnableUnixSupport运行时配置开关设置为 true 来启用对 .NET 6 中非 Windows 平台的支持。

runtimeconfig.template.json 模板文件:

{
 "configProperties": {
    "System.Drawing.EnableUnixSupport": true
 }
}

[appname].runtimeconfig.json 输出文件:

{
 "runtimeOptions": {
    "configProperties": {
       "System.Drawing.EnableUnixSupport": true
    }
 }
}

备注

  • 添加此配置开关是为了让严重依赖此包的跨平台应用有时间迁移到更新式的库。 但是,不会修复非 Windows bug。
  • 此开关仅在 .NET 6 中可用,已在 .NET 7 中删除。

这里由于修改的内容较多,暂时采用了第二种方案:

在启动项目根目录创建 runtimeconfig.template.json 文件,复制上面的内容,顺利识别成功。注意该方式只在.NET 6版本有效果.

转载请标明出处:.net 6 部署在Docker环境,报错The type initializer for ‘Gdip’ threw an exception

作者:Niko

欢迎访问我的主页:vlins.cn

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇