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

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

旧行为

在 .NET 6 之前,使用 System.Drawing.Common 包不会产生任何编译时警告,也不会引发运行时异常。

新行为

从 .NET 6 开始,平台分析器会在为非 Windows 操作系统编译引用代码时发出编译时警告。此外,除非您设置配置选项,否则会引发以下运行时异常:

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.Stack Trace:at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)/_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)/_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): at System.Drawing.Bitmap..ctor(String filename)/_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): at System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+MoveNext()/_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()----- Inner Stack Trace -----/_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): at System.Drawing.LibraryResolver.EnsureRegistered()/_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()/_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): at System.Drawing.SafeNativeMethods.Gdip..cctor()

版本介绍

.NET 6

重大变更类型

此更改会影响源代码兼容性和二进制兼容性。

变化的原因

因为System.Drawing.Common被设计为对 Windows 技术的精简包装,所以它的跨平台实现是次要的。

libgdiplus是原生端跨平台实现的主要提供者System.Drawing.Commonlibgdiplus实际上是对System.Drawing.Common依赖的 Windows 部分的重新实现。该实现是libgdiplus一个重要的组件。大约 30,000 行 C 代码基本上未经测试,并且缺乏很多功能。libgdiplus还具有许多用于图像处理和文本渲染的外部依赖项,例如cairopango和其他本机库。这些依赖关系使维护和运输组件更具挑战性。自从包含 Mono 跨平台实现以来,我们已经将许多问题重定向到libgdiplus从未得到修复的问题。相比之下,我们采用的其他外部依赖项,例如icuopenssl,是高质量的库。libgdiplus使其功能集和质量与 .NET 堆栈的其余部分相提并论是不可行的。

通过对 NuGet 包的分析,我们观察到它System.Drawing.Common主要用于跨平台的图像处理,例如 QR 码生成器和文本渲染。我们没有注意到大量的图形使用,因为我们的跨平台图形支持不完整。SkiaSharp 和 ImageSharp 通常很好地支持我们System.Drawing.Common在非 Windows 环境中看到的用法。

System.Drawing.Common将仅在 Windows 窗体和 GDI+ 的上下文中继续发展。

建议操作

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

  • ImageSharp
  • SkiaSharp
  • Microsoft.Maui.Graphics

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

JSON复制
{"configProperties": {"System.Drawing.EnableUnixSupport": true}
}

添加此配置开关是为了让严重依赖此包时间的跨平台应用程序迁移到更现代的库。但是,不会修复非 Windows 错误。此外,此开关已在 .NET 7 中删除。

linux docker 中使用 System.Drawing.Common 异常 System.Drawing.Common 仅在 Windows 上受支持相关推荐

  1. 解决Linux docker中的mysql区分大小写问题

    注:mysql5.7为本例docker中mysql容器的名称. 进入mysql容器: docker exec -it mysql5.7 /bin/bash 以root用户登录mysql: mysql ...

  2. linux docker中gdb调试断点不停

    1.检测是否有调试信息 编译-g 去掉优化 -o0 2.warning: Error disabling address space randomization: Operation not perm ...

  3. linux查看oracle线程,【实验】【PsList】使用PsList查看Windows上Oracle的线程等信息

    通过这个小文儿,给大家介绍并演示一下Window操作系统上的一个查看进程的小工具pslist,可以通过这个小工具查看得到Oracle线程等相关信息. 1.截止到今天09.08.05,能得到的最新版本是 ...

  4. 第12章 Docker 中 MySQL 的安装与配置

    第12章 Docker 中 MySQL 的安装与配置 文章目录 第12章 Docker 中 MySQL 的安装与配置 前言 目标 环境 支持的不同版本 Tag 和相应的Dockerfile链接 安装 ...

  5. 在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库

    在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库 在上一篇文章中,我们提到了如何使用Docker官方版本的centos7搭建容器集群并实现同一ip ...

  6. linux docker漏洞,安装shadow或linux-pam的Alpine Linux Docker镜像有漏洞,附解决

    只要你在 Alpine Linux 系统 Docker 镜像中安装有 shadow 或 linux-pam 软件包,那么这个镜像是有安全漏洞的,需要尽快修补,要说明的是,其他 Alpine Linux ...

  7. 迁移数据库到SQL on Linux Docker

    问题引入 前一篇文章,菜鸟找到了SQL on Linux Docker容器销毁后,容器中的数据库文件可以得以保留的方法,老鸟非常开心.所以,今天又提出了新的问题:"鸟儿,如果我想把我的数据库 ...

  8. Linux内核中常见内存分配函数

    1.      原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示.四级页表分 ...

  9. Linux内核中内存分配函数

    1.原理说明 Linux内核 中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示.四级页表分别为 ...

最新文章

  1. 梯度下降理解和梯度下降计算检查斯坦福
  2. 在C#中使用SqlDbType.Xml类型参数
  3. Android --- RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认
  4. java中活锁和死锁的区别_死锁、活锁、饿死和阻塞的个人理解
  5. websocket的用途/场景
  6. JavaScript高级程序设计之EventUtil
  7. 【Elasticsearch】ARS提升检索吞吐率
  8. 前端市场现在是不是饱和了?
  9. 精心挑选的15款优秀 jQuery 文本特效插件和教程
  10. emcy协议_商铺三方租赁协议合同范本
  11. namecheap 邮件服务器,NameCheap域名邮局/企业邮局开通与初始设置
  12. 关于Windows 7操作系统进行磁盘碎片整理时提示“已使用其他程序计划了磁盘碎片整理程序”的解决办法
  13. 什么是 Sidecar
  14. 华为企业组网实例:VRRP+MSTP典型组网配置
  15. 学习-Java循环while之求非负数之和
  16. 资源依赖项注入失败: org.springframework.beans.factory.BeanCreationException: Error creating bean with name
  17. Canva在线免费图表制作工具
  18. 原生js写一个简单的编辑器
  19. 交流电源滤波器电路图及作用分析
  20. D类音频功放输出功率测试

热门文章

  1. WSL+oh-my-zsh安装 教程
  2. PDF快捷工具软件开发(非标)
  3. java: 程序包com.sun.xml.internal.ws.api.ha不存在
  4. 加载主类 Hello 时出现 LinkageError java.lang.UnsupportedClassVersionError
  5. Robot Framework应用——Mac环境下Robot Framework的安装及简单实用
  6. Mac上好用的照片查看器
  7. element-ui之el-image-viewer(图片查看器)
  8. ESP32S3蓝牙学习系列---Beacon信标之Eddystone
  9. 不留痕迹的清除部分history历史命令记录
  10. 【IOT专栏】当图像碰上区块链