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. 在 .NET6 和 .NET7 平台上,無法在 Linux 和 MacOs 上實現 System.drawing.common

  2. 獲取 system.drawing.common 在此平台上不受支持 的異常消息

  3. 為 .NET6 設置 System.Drawing.EnableUnixSupport 運行時配置為 true

  4. 在 .NET7 中支持也不再可用

  5. 使用 IronSoftware.Drawing 開源庫替換 System.Drawing.Common 以支持 NET7

在 .NET6 和 .NET7 中,Microsoft 已停止支持 Linux 和 MacOs System.Drawing.Common 只適用於 Windows.

  • 在非 Windows 操作系統上,會拋出 TypeInitializationException 異常和 PlatformNotSupportedException 作為內部異常。
  • 在 .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.

在 .NET6 中的臨時解決方案:

通過在 runtimeconfig.json 文件中將 System.Drawing.EnableUnixSupport 運行時配置開關設置為 true,啟用對非 Windows 平台的支持:

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

將以下代碼添加到您的代碼開頭:

System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

.NET7

隨著.NET7的發布,微軟已經移除了變通方法——完全在Linux和MacOs中移除System.Drawing.Common的支持。

Iron Software已發布了一個開源替代品來替代System.Drawing.Common,稱為IronSoftware.Drawing。 [NuGet] [GitHub]

了解更多: https://ironsoftware.com/open-source/csharp/drawing/docs/