System.Drawing.Common 替代方案(.NET 7 和非 Windows)
避免系統不支援 system.drawing.common 的解決方法
在 Linux 和 MacOS 平台上,無法在 .NET6 和 .NET7 中實現 System.drawing.common
獲取system.drawing.common 不支援此平台的異常訊息
將System.Drawing.EnableUnixSupport運行時配置設置為true以支持.NET6
.NET7 也不再支持了。
使用 IronSoftware.Drawing 開源庫替換 System.Drawing.Common 以用於 NET7
在 .NET6 和 .NET7 中,微軟已經停止支持 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/