Laden...

.Net Technologie um Programm Multiplatform ausführbar zu entwickeln ähnlich Xamarin

Erstellt von Cornflake vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.868 Views
C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren
.Net Technologie um Programm Multiplatform ausführbar zu entwickeln ähnlich Xamarin

Hallo Leute

Mit Xamarin kann man ja Programme schreiben, die auf Windows Store, Android Smartphone, Windows Phone und iOS Smartphone laufen. Zu so einer ähnlichen Anforderung suche ich eine Lösung.

Ich habe vor ein Programm zu schreiben das folgende Plattformen unterstützen soll:

Hardware: Netbook, Desktoprechner, Server im Haus, Server im Internet von fremden Anbieter

Betriebssysteme: Windows XP - Windows 10 unterstützt werden.

Vom Aufbau her will ich das Programm in zwei Teile gliedern:

  1. Backend:
    Programm, dass Dateien entgegennimmt, verarbeitet und wieder ausgibt.
    Ideal wäre es, wenn auch C# Quellcode Dateien übertragen werden könnten und diese dynamisch zur Laufzeit kompiliert werden würden.
    Läuft auf allen Plattformen

  2. GUI:
    Programm, dass Dateien und Verarbeitungsweise auswählen lässt.
    Läuft auf Netbook, Desktoprechner und kommuniziert mit Backend per WCF.

Daher es kann u.a. die Kombinationen GUI(Dekstop)-Backend(Desktop) oder z.B. GUI(Netbook)-Backend(Server Anbieter im Internet) geben.

Ideal wäre es, wenn ich zum Schluss z.B. eine Backend.exe/Backend.dll habe, die ich auf jede Plattform ohne Neukompilierung kopieren kann. Und eine Gui.exe die ich auf Netbook oder Desktop Rechner kopieren kann. Und dann mit der Verarbeitung beginnen kann.

Jetzt habe ich überlegt, mit welcher Technologie ich das machen kann und bin bisher auf .Net Core, Xamarin, Docker und WCF Selfhostet gestoßen.

Probleme:
.Net Core und Xamarin würden für Windows XP Systeme wegfallen evtl. komme ich da dann nicht um ein seperates Projekt rum, dass aber vllt trotzdem viel vom anderen Code wiederverwenden kann.

Für den Sereranbieter im Internet, habe ich bisher ein PHP WCF Lösung angestrebt, aber da ist dann das Debugging übelst. Daher dachte ich an einen Applicationserver wie der Tomcat für Java. Aber für .Net habe ich da nichts gefunden. Angeblich kommt dann der IIS von Microsoft zum Einsatz, aber eine asp.net Anwendung läuft ja wieder nicht auf einem Desktop Rechner und arbeitet auch ganz anders denke ich.

Am ehesten würde mir dann noch die Docker Variante gefallen für das Backend. Auf alle Rechner kommt VirtualBox in dem dann ein Dockercontainer ausgeführt wird. Aber ich glaube dass hat dann bei XP zu viel Overhead für die Virtualisierungsumgebung.

Habt Ihr eine Idee, womit/wie ich das am ehesten programmieren könnte?
Ziel ist es, das Programm gut debuggen zu können und nicht für jedes System neu schreiben zu müssen. Evtl. gibts ja was womit der Kern Quellcode gleich bleibt und nur Teile systemindividuell geändert werden müssen.

Grüße Cornflake

M
177 Beiträge seit 2009
vor 7 Jahren

Ich habe dich so verstanden, dass Frontend als auch Backend möglichst Betriebssystem unabhängig sein sollten.

Frontend:

Die Frage ist warum, du im Frontend eine Web Applikation nicht in Betracht ziehst, dann kann dir das OS für das Frontend, gelinde gesagt, egal sein.

Sollten das deine Anforderungen nicht zulassen, schau dir mal https://github.com/AvaloniaUI an.

Backend:
WCF würde ich was plattformunabhängigkeit betrifft schon mal ausschließen.

Ich würde wenn möglich einen .NETCore RestFul Service erstellen.

Aber auch hier muss man schauen, was der alles können soll. Zugriffe z.B. mit .NETCore auf Active Directory werden derzeit nicht unterstützt.

PS: ASP.NET wird meines Wissens, teilweise von Mono unterstützt. Das heißt das läuft auf Linux und sollte eigentlich auch unter Windows gehen.
PPS: Wenn du mit Virtualisierung arbeitest, dann macht doch die ganzen implementierungen die Plattformunabhängigkeit berücksichtigen keinen Sinn mehr!?

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Hi mfr
Thx für deine Antwort.

Ja Backend schon. Bei Frontend ist eher eine komfortable/flüssige Bedienbarkeit wichtig. Daher will ich dort eher auf eine native und keine Web Lösung setzen.

AvaloniaUI schaue ich mir mal an.

Kannst du zu .NETCore RestFul Service einen Link empfehlen?
Bisher finde ich da nur etwas im zusammenhang mit asp.net
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
https://github.com/tenor/RestBus/wiki/ASP.NET-Core-service-(RabbitMQ-callable)
RestFul sagt mir zwar etwas und .Net Core ist soweit ich verstanden habe, jetzt erst frisch rausgekommen aber ein schönes Tutorial mit Praxisbeispiel würde mir da fehlen und über google sehe ich da nur etwas in verbindung mit asp.net.

Active Directory wäre mir jetzt egal. evtl. würde ich die Dateien in einem Isolated Storage ablegen.

Ja Virtualisierung wäre auf dem Desktop dann auch nur eine Notlösung. Für die Internetanbieterversion fällt mir aber aktuell nur Docker ein.

16.835 Beiträge seit 2008
vor 7 Jahren

ASP.NET Core hat de facto kaum Unterschiede zu ASP.NET WebAPI im Sinne der API.
Beide läuft über Controller und wird einfach via Json serialisiert. Davon abgesehen, dass es zig Beispiele auf GitHub und unter docs.asp.net gibt, kann man auch die ASP.NET WebAPI Docs verwenden, wenns um die API Funktionalität geht.

Zum Thema Plattformen:
ASP.NET Core läuft sowohl auf .NET Core wie auch auf .NET Framework.
.NET Core ist eine eigene Entwicklung von Microsoft und ist nicht Mono. ASP.NET Core läuft auch nicht auf/mit Mono.

ASP.NET Core ist aber definitiv die Zukunft.
Ob aber darunter .NET Core oder .NET Framework verwendet wird, das liegt an der Umgebung, die ihr nutzen wollt.
.NET Core bietet sich aber vermutlich in 90% der Fällen an.

Relevant wird in Zukunft ohnehin der .NET Standard, der dann mit 2.0 auch entsprechend viele APIs auf den jeweiligen Plattformen (.NET Core, .NET Framework, Xamarin...) unterstützen wird.

Zum Thema UI:
Stand heute gibt es keine 100% Möglichkeit, um auf den jeweiligen mobilen Plattformen (Windows Phone, iOS, Android..) unabhängige Apps zu schreiben.
In sehr vielen Fällen funktioniert das für einfache UIs, aber sobald ihr was spezifisches einer Plattformen wollt (zB Icon-Buttons ist so ein Beispiel), so kann das Xamarin nicht, weil Xamarin nur den kleinsten gemeinsamen Nenner (Button Text) abdeckt.
Wollt ihr spezifisches, so müsst ihr das spezifisch schreiben und nicht im Shared Project.

Im Bereich Desktop gibts noch weniger; Stand heute eigentlich nichts, das auf Windows PC, Linux, macOS 100% teilbar ist.

PS: .NET Standard und .NET Core sollten sich alle .NET Entwickler anschauen.
Das sind zentrale Themen in der zukünftigen .NET Welt, um die sich alles drehen wird. Wer sich hier nicht über die entsprechenden Dokumentationskanäle wie docs.microsoft.com informiert, wird in Zukunft massive Verständnisprobleme haben und sehr schnell abgehängt werden.

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

@Abt
Für das Backend. Könnte man mit asp.net bzw. asp.net Core eine lokale Anwendung schreiben mit Zugriff auf lokale Dateien, oder Isolated Storage? Läuft die dann auch ohne IIS oder zusätzlichen installationen?

Würde dann über .Net Core RestFul Webservices mit Xamarin oder einem Standard Windows Programm dann die GUI dazu erstellen.

16.835 Beiträge seit 2008
vor 7 Jahren

Ja ne, natürlich nicht.
Dafür müsstest Du den Technologiestack .NET verlassen und zB mit Electron arbeiten (HTML/JS).

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Bei electron, wenn ich das auf deren Webseite richtig sehe, wird html und js verwendet um das in eine exe zu verpacken. Das wäre dann etwas für das Frontend?
Aber da will ich lieber auf c# und richtig nativen code setzen. Am liebsten mit Datagridview etc.

Was würde denn für das backend gehen?

2.298 Beiträge seit 2010
vor 7 Jahren

Nun im einfachsten Fall würde es wohl ein Soap-Webservice im IIS-gehostet tun. Das hängt aber stark von deinen Anforderungen ab. Wenn das Backend z.B. intern selbst noch Daten verarbeiten soll die nicht von außen getriggert werden, fällt das raus.

Der IIS lässt sich auch eigentlich bei so ziemlich allen Windows Versionen ab XP aktivieren / installieren.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

M
177 Beiträge seit 2009
vor 7 Jahren

Der IIS lässt sich auch eigentlich bei so ziemlich allen Windows Versionen ab XP aktivieren / installieren.

Er will als Backend evtl. Linux/Mac einsetzen, soweit ich das verstanden habe. Dann sind IIS Abhängigkeiten eher unpraktisch.

16.835 Beiträge seit 2008
vor 7 Jahren

Aber da will ich lieber auf c# und richtig nativen code setzen.

a) ist C# derzeit nie nativ, auch nicht auf Windows.
b) wird C# auch nicht nativ auf anderen Plattformen laufen (aktuell zumindest)
c) gibt es .NET in Form von .NET Core zwar mittlerweile direkt von Microsoft für Linux/Mac, aber gibt es derzeit hier keine Desktop UI

Ich dachte, dass ich das eigentlich ausgedrückt habe, aber gerne noch als ganzen Satz:
Derzeit gibt es keine .NET Technologie, die alle Desktop-Plattformen (Du nennst es Frontend) abdeckt.

Beim Backend bzw. der Middleware gibt es verschiedene Möglichkeiten; die aktuellste eben ASP.NET Core mit .NET Core als Unterbau.
Als Webserver dann eben KESTREL sowie auf den jeweiligen Plattformen entsprechende Reverse Proxies in Form von IIS für Windows und NGINX auf Linux und Mac.

Bleibt Dir:

  • Willst Du bei x-plat UI bleiben, bleibt Dir nur ein Technologiewechsel derzeit, zB Electron.
  • Backend x-plat ist kein Problem, sofern Dir ASP.NET Core bzw. allgemein Konsolenanwendungen ausreichen.
C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Thx für eure Infos

Wegen nativ. Darunter verstehe ich, da ja auf einem Windows System schon das .net Framework installiert ist und ein C# Programm direkt mit vollen Zugriff auf die Systemressourcen (zumindest bezogen auf Datei laden speichern) arbeiten kann. Dagegen würde eine HTML Anwendung immer einen Webserver zusätzlich benötigen und könnte nicht direkt auf Dateien zugreifen.

@mfe Als Backend wäre es super wenn auf einem Windows XP Netbook kein IIS etc. vorher seperat installiert werden müsste. Linux ist nicht speziell angefordert, aber wenn Internetanbieter nur Linux zu Verfügung stellen, wäre es dann schon wieder eine indirekte Vorraussetzung.

Da das Backend durchaus eine Konsolenanwendung sein könnte, wäre .Net Core wie abt schon schreibt, vllt wirklich die beste Lösung für die Zukunft. Allerdings würde dann Windows XP für Altsysteme rausfallen, da XP bestimmt nicht mehr .Net Core unterstützt.

In wieweit lässt sich da Docker einsetzen? Wenn ich das richtig gelesen hatte, lässt sich .Net Core ohne weiteres innerhalb eines Docker Container ausführen. Damit sollte das Deployen in Bezug nur auf Internetanbieter und eigene Server doch leichter werden?

Ok für das Frontend wären dann individuelle Entwicklungen nicht zu umgehen.

16.835 Beiträge seit 2008
vor 7 Jahren

Dagegen würde eine HTML Anwendung immer einen Webserver zusätzlich benötigen und könnte nicht direkt auf Dateien zugreifen.

Nö. Schau Dir Electron an...
Wenn Du Tipps nicht mal 5 Min anschaust kann ich mir das in Zukunft sparen...

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Sorry Abt
Danke für deinen Tipp.

An sich eine sehr interessante Idee so html/js Zugriff auf weitere Ressourcen zu geben.
Hatte es gelesen aber so verstanden, dass dafür auch npm als runtime/webserver installiert werden muss. Wenn ich es jetzt aber richtig verstehe wird für das Endbenutzerpaket alles in eine ca. 50 MB große exe Datei gepackt (abgespeckter browser, js, html, bildressourcen, etc. ), die direkt ausgeführt werden kann.

Woanders habe ich jetzt noch etwas gefunden um anscheinend .net core auch mit anzubinden. Dann könnte das als Backend verwendet werden.
https://github.com/kexplo/electron-edge