System.Drawing.Common 替代方案(.NET 7 和非 Windows)

This article was translated from English: Does it need improvement?
Translated
View the article in English

避免出现"System.Drawing.Common 在此平台上不受支持"的变通方法

  1. 在 Linux 和 macOS 平台上,.NET 6 和 .NET 7 无法实现System.Drawing.Common
  2. 您将收到一条异常消息,指示"此平台不支持 System.Drawing.Common"。
  3. 将 .NET 6 的System.Drawing.EnableUnixSupport运行时配置设置为true
  4. 请注意,.NET 7 也不再提供支持。
  5. 使用IronSoftware.Drawing开源库来替换 .NET 7 中的System.Drawing.Common

在 .NET 6 和 .NET 7 中,微软已停止在 Linux 和 macOS 上支持System.Drawing.Common 。 根据官方文档,该库仅适用于 Windows 平台。

  • 在非 Windows 操作系统上,会抛出 TypeInitializationException 异常,其内部异常为 PlatformNotSupportedException
  • 在 .NET 6 中,当引用System.Drawing.Common 的代码被编译为非 Windows 操作系统时,平台分析器会发出编译时警告。 此外,除非设置了配置选项,否则将抛出以下运行时异常:
System.TypeInitializationException : The type initializer for 'Gdip' threw an exception. --- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms.

.NET 6 中的临时解决方法:

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

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

在代码开头添加以下代码,即可通过编程方式启用 Unix 支持:

// Enables Unix support for System.Drawing in .NET 6. This setting is ignored in .NET 7.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
// Enables Unix support for System.Drawing in .NET 6. This setting is ignored in .NET 7.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
' Enables Unix support for System.Drawing in .NET 6. This setting is ignored in .NET 7.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", True)
$vbLabelText   $csharpLabel

.NET 7

.NET 7发布后,微软删除了该解决方案,完全取消了对Linux和macOS上System.Drawing.Common的支持。

Iron Software 发布了System.Drawing.Common的开源替代品,名为IronSoftware.Drawing 。 您可以在NuGetGitHub上找到它。

欲了解更多信息,您可以访问文档页面:Iron Software Drawing Documentation

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 5,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronOcr
运行示例 观看您的图像变成可搜索文本。