IronBarcode - Alternativa a System.Drawing.Common

Iron Software ha lanzado un sustituto de código abierto para System.Drawing.Common. Más información sobre IronDrawing, pulse aquí.

A partir de .NET 6, System.Drawing.Common sólo funcionará en Windows.

  • En los sistemas operativos que no son Windows, a menos que establezca un interruptor de configuración en tiempo de ejecución, se lanza una excepción TypeInitializationException con PlatformNotSupportedException como excepción interna.
  • En .NET 6, el analizador de plataformas emite advertencias en tiempo de compilación cuando se compila código de referencia para sistemas operativos distintos de Windows. Además, se lanza la siguiente excepción en tiempo de ejecución a menos que establezca una opción de configuración:
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 para más información.
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()

Solución temporal: Habilite la compatibilidad con plataformas distintas de Windows estableciendo el interruptor de configuración en tiempo de ejecución System.Drawing.EnableUnixSupport en true en el archivo runtimeconfig.json:

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

Esta es la solución actual de Microsoft para la compatibilidad con System.Drawing en .NET 6:

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