2017-11-06 3 views
0

Wir erstellen eine .Net Core 2.0 C# -Web-App, die das System.Drawing-Paket verwendet.Verwenden von System.Drawing-Paket von mehreren Computern (mehrere Betriebssysteme)

Ich schreibe Code auf Mac, aber es wird auch auf dem Windows-Rechner entwickelt und in Linux-Server bereitgestellt.

Um System.Drawing unter OSX zu verwenden, musste ich das Runtime.osx.10.10-x64.CoreCompat.System.Drawing Nuget-Paket zu meinen Projektabhängigkeiten hinzufügen.

Aber dieser Code funktioniert jetzt nicht auf dem Windows-Rechner. Wir erhalten die System.AccessViolationException beim Versuch, die DrawString-Methode des Graphics-Objekts (Teil des System.Drawing) zu verwenden.

Also, meine Frage ist, was ist der übliche Weg, um das zu lösen? Ist es sogar möglich, System.Drawing-Klassen in diesem Multi-Setup zu verwenden?

Antwort

2

Der gleiche System.Drawing-Code sollte ohne Änderungen auf Linux, Windows und MacOS funktionieren. Sie sind richtig, dass Sie libgdiplus manuell installieren müssen (z. B. über brew install mono-libgdiplus) oder Referenz runtime.osx.10.10-x64.CoreCompat.System.Drawing für System.Drawing, um auf einem Mac zu arbeiten.

System.Drawing funktioniert unter Windows ohne externe Abhängigkeiten.

Wenn Sie immer noch CoreCompat.System.Drawing verwenden (was ich pflege), würde ich empfehlen, dass Sie stattdessen zu System.Drawing.Common migrieren - das ist die Microsoft-Implementierung von System.Drawing für .NET Core.

Wenn das Problem dann immer noch unter Windows reproduziert, wäre Ihre beste Wette, ein Code-Stück zu kopieren, das verwendet werden kann, um Ihr Problem zu reproduzieren, so dass ich es mir ansehen kann.

Verwandte Themen