Laden...

ScottPlot unter .Net8

Letzter Beitrag vor 7 Monaten 9 Posts 528 Views
ScottPlot unter .Net8

Ich habe gerade die ScottPlot Komponente zum Zeichnen von Diagrammen gefunden und finde sie sehr gut. Allerdings gibt es eine unschöne Sache. Damit ich es in meiner WinForm Applikation "gut" verwenden kann, benutze ich das ScottPlot.WinForm NuGet Paket. Damit bekomme ich ein FormsPlot Objekt, mit dem ich arbeiten kann. Beim Compilieren bekomme ich allerdings die Warnung

Das Paket "OpenTK 3.1.0" wurde nicht mit dem Projektzielframework "net8.0-windows7.0", sondern mit ".NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8, .NETFramework,Version=v4.8.1" wiederhergestellt. Dieses Paket ist mit Ihrem Projekt möglicherweise nicht vollständig kompatibel.

Zumindest im Moment ist das halt nur eine Warnung und ich habe noch nichts gefunden, was nicht funktioniert. OpenTK wird von der SkiaSharp Komponente bzw. deren WindowsForms Version benötigt.

Bei NuGet gibt es auch die ScottPlot Komponente (also ohne .WinForms), die auch viel öfters benutzt wird. Dort gibt es wohl nicht die .NetFramework Einschränkung. Allerdings scheint man damit auch keine Diagramme in einem Form zeichnen zu können.

Gibt es da vielleicht einen Trick oder habe ich nur das richtige noch nicht gefunden?

Eigentlich steht alles bei NuGet.
Das Paket unterstützt aktuell max. .NET 6.0, .NET Standard 2.0 und .NET Framework 4.6.2
Entsprechend kannst du nicht mit .NET 7.0 oder neuer arbeiten.

Die Abhängigkeit von weiteren Paketen, grenzen dann ebenfalls die möglichen .NET Versionen ein.

Link:
https://www.nuget.org/packages/ScottPlot/#package-manager

Nachtrag:
Die WinForms Erweiterung hängt ebenfalls nur von max. .NET 6.0 und .NET Framework 4.6.2 ab.
Entsprechend hast du auch da die Einschränkung, dass du bei .NET 6 oder Framework hängen bleiben musst.

Link:
https://www.nuget.org/packages/ScottPlot.WinForms

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Zitat von T-Virus

Eigentlich steht alles bei NuGet.
Das Paket unterstützt aktuell max. .NET 6.0, .NET Standard 2.0 und .NET Framework 4.6.2
Entsprechend kannst du nicht mit .NET 7.0 oder neuer arbeiten.

Nein, das stimmt nicht. .NET Assemblies sind aufwärtskompatibel. .NET 8 kann absolut problemlos eine .NET 6 Assembly verwenden.
Einzige Ausnahme: der Wechsel von .NET Framework zu .NET (Core), also .NET 5. Er muss also nirgends irgendwo hängenbleiben.

In dem Fall ist das so, dass das Projekt offenbar über Compiler-direktiven verschiedene Versionen .NET Versionen ausspuckt - und das ist ein völlig normales Verhalten bzw. Setup. Der Projektmacher hat sich hier offenbar dafür entschieden maßgeblich die LTS Versionen zu erzeugen.

Machen wir hier im Forum mit unseren Paketen zB (mycsharp/HttpUserAgentParser: Parsing HTTP User Agents with .NET (github.com)), ich mit meinem Zeug/Paketen oder zB bei Kunden auch nicht anders, ausser wir haben Feature-Anforderungen für STS.
Die Assemblies hier haben also 0,0 Einschränkung.


Das Problem hier ist auch nicht ScottPlot, sondern OpenTK. Das kann man auch einfach dem ersten Satz entnehmen:

Das Paket "OpenTK 3.1.0" wurde nicht mit dem Projektzielframework "net8.0-windows7.0",

ScottPlot.WinForms verwendet OpenTK, aber OpenTK hat keinerlei unterstützte Frameworks, siehe NuGet Gallery | OpenTK 4.8.2
Dadurch gibts ein Compiler Warning, das man hier sieht. Fazit der Aussage ist: Glück für Dich, wenns funktioniert.

Da ja (zumindest fast) alles open source ist, kann man ja gut in die Implementierung schauen. Ich habe gerade schon versucht, das Ergebnis in ein Bitmap rendern zu lassen, welches ich dann einfach anzeigen kann. Das läuft dann aber alles über SkiaSharp, wo ich den letzten Schritt nicht hinbekommen habe. In dem ScottPlot Paket ohne WinForm ist kein SkControl enthalten, was das wohl alles macht.

Da hat keiner von euch Erfahrung oder einen Hinweis?

Kurz gegoogeltSKControl Class (SkiaSharp.Views.Desktop) | Microsoft Learn

Hat eine harte Abhängigkeit an Windows Forms.

Namespace: SkiaSharp.Views.Desktop

Assembly: SkiaSharp.Views.WindowsForms.dll

Ergo kanns auch nicht im neutralen Paket "ScottPlot" sein sondern eben nur in "ScottPlot.Winforms"

Abt: Für die neueste OpenTK-Version 4.8.2 (sowie generell die 4.x.y-Versionen) stimmt deine Aussage bzgl. "keinerlei unterstützte Frameworks".

Bei der referenzierten (älteren) Version 3.1.0 (sowie generell die 3.x.y-Versionen) ist jedoch explizit (noch) das .NET Framework angegeben: OpenTK/3.1.0

Das Problem scheint aber bei SkiaSharp.Views.WindowsForms zu liegen, da dort auch für ".NETCoreApp 3.1" die OpenTK-Version ">= 3.1.0" angegeben ist.

AmpelB: M.E. kannst du die Warnung aber einfach ignorieren (denn es müßten schon explizit eine der wenigen Breaking Changes in .NET dort benutzt worden sein).

Zitat von Th69

Abt: Für die neueste OpenTK-Version 4.8.2 (sowie generell die 4.x.y-Versionen) stimmt deine Aussage bzgl. "keinerlei unterstützte Frameworks".

Bei der referenzierten (älteren) Version 3.1.0 (sowie generell die 3.x.y-Versionen) ist jedoch explizit (noch) das .NET Framework angegeben: OpenTK/3.1.0

Ah, das hab ich übersehen. Zwar drüber geschaut, aber das übersehen 😉

Es würde mich schon reizen, mal in die Implementierung etwas genauer hineinzuschauen. Prinzipiell muss doch "nur" der Renderer ausgetauscht werden. Da werden ja vielleicht nur Funktionen benutzt, die ein normales Grafics Ojekt des .Net auch kann.

Wie ist denn das Verhältnis vom SkiaSharp und .Net? Zumindest gibt es die SkiaSharp Doku Seiten doch unter .Net. Und wenn ich das richtig sehe, benutzt ScottPlot SkiaSharp. Und SkiaSharp benutzt das OpenTK, mit dem es die Probleme gibt. Gibt es dann vielleicht ein SkiaSharp unter .Net 8 ohne Warnungen? Vielleicht ist die Performance dann in einigen Bereichen nicht ganz so gut, aber damit könnte ich sehr wahrscheinlich leben.

Zitat von AmpelB

Es würde mich schon reizen, mal in die Implementierung etwas genauer hineinzuschauen. Prinzipiell muss doch "nur" der Renderer ausgetauscht werden. Da werden ja vielleicht nur Funktionen benutzt, die ein normales Grafics Ojekt des .Net auch kann.

Alles Open Source. Schaus Dir halt an.

Wie ist denn das Verhältnis vom SkiaSharp und .Net? Zumindest gibt es die SkiaSharp Doku Seiten doch unter .Net.

SkiaSharp ist eine Bibliothek von Mono. Mono wurde mittlerweile von Microsoft aufgekauft im Zuge der Xamarin Akquirierung. Damit unterliegenden sie seitdem auch der Microsoft Lizenzierung. Daher sind die Docs hier auch Teil der Xamarin Docs bei Microsoft Learn, jedoch nicht .NET Docs.
Xamarin ist mittlerweile abgekündigt; aber gibt IIRC keine Info, wie es mit Xamarin-Töchterprojekten wie SkiaSharp weiter geht. Daher kann man davon ausgehen, dass das weiter in der Entwicklung und im Support ist.

Gibt es dann vielleicht ein SkiaSharp unter .Net 8 ohne Warnungen?

Siehe was ich oben geschrieben habe.