IronBarcode - 替代 System.Drawing.Common

2022年3月17日
已更新 2024年12月17日
分享:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Iron Software 有一個名為IronDrawing的開源替代方案,用於替換 System.Drawing.Common。 若要了解更多關於IronDrawing的信息,請點擊此處

從 .NET 6 開始,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. See https://aka.ms/systemdrawingnonwindows for more information.
Stack Trace:
            at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)
          /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)
          /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): at System.Drawing.Bitmap..ctor(String filename)
          /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): at System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+MoveNext()
          /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
----- Inner Stack Trace -----
          /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): at System.Drawing.LibraryResolver.EnsureRegistered()
          /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
          /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): at System.Drawing.SafeNativeMethods.Gdip..cctor()

臨時解決方法:在 runtimeconfig.json 文件中將 System.Drawing.EnableUnixSupport 執行時配置開關設置為 true,以啟用對非 Windows 平台的支持:

{
         "runtimeOptions": {
            "configProperties": {
               "System.Drawing.EnableUnixSupport": true
            }
         }
      }

此解決方案是 Microsoft 目前在 .NET 6 中對 System.Drawing 支援的解決方案:

https://docs.microsoft.com/zh-tw/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only