Alternatywy dla System.Drawing.Common (.NET 7 i systemy inne niż Windows)
Rozwiązania umożliwiające uniknięcie błędu 'System.Drawing.Common nie jest obsługiwane na tej platformie'
- Implementacja System.Drawing.Common nie jest możliwa na platformach Linux i macOS w .NET 6 i .NET 7.
- Pojawi się komunikat wyjątku wskazujący, że 'System.Drawing.Common nie jest obsługiwane na tej platformie'.
- Ustaw konfigurację czasu wykonania System.Drawing.EnableUnixSupport na true dla .NET 6.
- Należy zauważyć, że wsparcie nie jest już dostępne także w .NET 7.
- Użyj biblioteki open-source IronSoftware.Drawing jako zamiennika dla System.Drawing.Common w .NET 7.
W .NET 6 i .NET 7, Microsoft zaprzestał wsparcia dla System.Drawing.Common na Linux i macOS. Biblioteka będzie działała tylko na platformach Windows zgodnie z oficjalną dokumentacją.
- Na systemach operacyjnych innych niż Windows zostanie rzucony
TypeInitializationExceptionzPlatformNotSupportedExceptionjako wewnętrzny wyjątek. - W .NET 6, analizator platformy emituje ostrzeżenia w czasie kompilacji, gdy kod odwołujący się do System.Drawing.Common jest kompilowany dla systemów operacyjnych innych niż Windows. Dodatkowo zostanie rzucony następujący wyjątek w czasie wykonania, chyba że zostanie ustawiona opcja konfiguracyjna:
System.TypeInitializationException : The type initializer for 'Gdip' threw an exception. --- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms.
Tymczasowe obejście w .NET 6:
Włącz wsparcie dla platform innych niż Windows, ustawiając przełącznik konfiguracji czasu wykonania System.Drawing.EnableUnixSupport na true w pliku runtimeconfig.json:
{
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
}
Dodaj następujący kod na początku swojego kodu, aby programowo włączyć wsparcie dla 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)
.NET 7
Z wydaniem .NET 7, Microsoft usunął obejście, całkowicie usuwając wsparcie dla System.Drawing.Common na Linux i macOS.
Iron Software wydało open-source'owy zamiennik dla System.Drawing.Common, o nazwie IronSoftware.Drawing. Możesz go znaleźć na NuGet i GitHub.
Aby dowiedzieć się więcej, odwiedź stronę dokumentacji: IronSoftware Drawing Documentation

