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上找到它。

如需了解更多信息,請訪問文檔頁面: IronSoftware 繪圖文檔

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

準備好開始了嗎?
Nuget 下載 5,246,844 | 版本: 2025.12 剛發表