System.Drawing.Common 替代方案(.NET 7 和非 Windows)
避免系統不支援 system.drawing.common 的解決方法
在 .NET6 和 .NET7 中,無法在 Linux 和 MacOs 平台上實現 System.drawing.common。
獲取異常消息:system.drawing.common 在此平台不支持
設定 System.Drawing.EnableUnixSupport 運行時配置為 true 用於 .NET6
.NET7 也不再支持了。
使用 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/