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. 設定 System.Drawing.EnableUnixSupport 運行時配置為 true 用於 .NET6

  4. .NET7 也不再支持了。

  5. 使用 IronSoftware.Drawing 開源庫來替換 System.Drawing.Common for 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 的發布,Microsoft 已經取消了替代方法 - 完全移除了 Linux 和 MacOs 中對 System.Drawing.Common 的支持。

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

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