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