System.Drawing.Common Alternatives (.NET 7 & Non-Windows)

This article was translated from English: Does it need improvement?
Translated
View the article in English

Remèdes pour éviter "System.Drawing.Common n'est pas pris en charge sur cette plateforme"

  1. L'implémentation de System.Drawing.Common n'est pas possible sur les plateformes Linux et macOS pour .NET 6 et .NET 7.
  2. Vous recevrez un message d'exception indiquant que "System.Drawing.Common n'est pas pris en charge sur cette plateforme"
  3. Définissez la configuration d'exécution System.Drawing.EnableUnixSupport sur true pour .NET 6.
  4. Notez que le support n'est plus disponible pour .NET 7 également.
  5. Utilisez la bibliothèque open-source IronSoftware.Drawing pour remplacer System.Drawing.Common pour .NET 7.

Dans .NET 6 et .NET 7, Microsoft a cessé de prendre en charge System.Drawing.Common sur Linux et macOS. La bibliothèque ne fonctionnera que sur les plateformes Windows, conformément à la documentation officielle.

  • Sur les systèmes d'exploitation non Windows, une TypeInitializationException est déclenchée avec PlatformNotSupportedException comme exception interne.
  • Dans .NET 6, l'analyseur de plateforme émet des avertissements au moment de la compilation lorsque le code faisant référence à System.Drawing.Common est compilé pour des systèmes d'exploitation non Windows. En outre, l'exception d'exécution suivante est levée à moins qu'une option de configuration ne soit définie :
System.TypeInitializationException : The type initializer for 'Gdip' threw an exception. --- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms.

Contournement temporaire dans .NET 6:

Activez la prise en charge des plates-formes non Windows en définissant le commutateur de configuration d'exécution System.Drawing.EnableUnixSupport sur true dans le fichier runtimeconfig.json :

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

Ajoutez le code suivant au début de votre code pour activer de manière programmatique la prise en charge d'Unix :

// Enables Unix support for System.Drawing in .NET 6. This setting is ignored in .NET 7.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
// Enables Unix support for System.Drawing in .NET 6. This setting is ignored in .NET 7.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
' Enables Unix support for System.Drawing in .NET 6. This setting is ignored in .NET 7.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", True)
$vbLabelText   $csharpLabel

.NET 7

Avec la sortie de .NET 7, Microsoft a supprimé la solution de contournement, en supprimant complètement la prise en charge de System.Drawing.Common sur Linux et macOS.

Iron Software a publié un remplaçant open-source pour System.Drawing.Common, appelé IronSoftware.Drawing. You can find it on NuGet and GitHub.

Pour en savoir plus, vous pouvez consulter la page de documentation : Documentation de dessin IronSoftware

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 5,044,537 | Version : 2025.11 vient de sortir