Alternativas a System.Drawing.Common (.NET 7 y no Windows)

En .NET6 y .NET7, Microsoft ha dejado de dar soporte a Linux y MacOs, y System.Drawing.Common sólo funcionará en Windows.

Las soluciones para evitar system.drawing.common no son compatibles con esta plataforma

  1. Implementar System.drawing.common no es posible en plataformas Linux y MacOs para .NET6 y .NET7
  2. Obtener mensaje de excepción de system.drawing.common no es compatible con esta plataforma
  3. Establecer System.Drawing.EnableUnixSupport configuración en tiempo de ejecución a true para .NET6
  4. El soporte ya no está disponible también en .NET7
  5. Utilice la biblioteca de código abierto IronSoftware.Drawing para reemplazar System.Drawing.Common para NET7
  6. En los sistemas operativos que no son Windows, se lanza una excepción TypeInitializationException con PlatformNotSupportedException como excepción interna.
  7. 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.

Solución temporal en .NET6:

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

{

    "runtimeOptions": {

        "configProperties": {

            "System.Drawing.EnableUnixSupport": true

        }

    }

}

Añade el siguiente código al principio de tu código:

System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

.NET7

Con el lanzamiento de .NET7, Microsoft ha eliminado la solución alternativa, eliminando completamente el soporte para System.Drawing.Common en Linux y MacOs.

Iron Software ha lanzado un sustituto de código abierto para System.Drawing.Common, llamado IronSoftware.Drawing. [NuGet] [GitHub]

Para saber más: https://ironsoftware.com/open-source/csharp/drawing/docs/