C# via Mono (Forschungsbeitrag)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo, liebes Forum.

    Da ich selbst C#-Entwickler bin, aus Gewohnheit hier nach dem Anmelden gleich mal gesucht habe und nichts zu den Stichworten "C#" oder "Mono" finden konnte, hier schnell mal mein Erfahrungsschatz diesbezüglich.

    C# ist ja diese Programmiersprache von Microsoft, die auf dem .net-Prinzip aufsetzt und sich kurz ungefähr so beschreiben lässt: "wie Java und noch ein paar Sachen dazu". Ich will nicht sagen, dass sie besser ist als irgendwelche anderen Programmiersprachen, aber ich habe beruflich ziemlich viel damit zu tun, so dass ich eher darauf zurück greife, als etwa auf Java oder C/C++.

    Da auf dem Raspi mangels der Performance schlecht in einer komplexen IDE zu entwickeln ist, habe ich mal geschaut, ob man nicht ein auf Windows aus C# kompiliertes Programm auf dem Raspi in der Konsole laufen lassen kann. (Das Visual C# Express gibt es übrigens kostenlos, und das reicht für diese Zwecke; auch wenn es im Vergleich zum "großen" Visual Studio eine ganze Menge Abstriche zu machen gibt.)

    Von vorn herein ist erst einmal klar, dass Windows Forms (also die bekannten Windows-Fenster) nicht auf Linux laufen. Da gibt es auch beim Mono-Projekt verschiedene Anstrengungen, die WinForms zu interpretieren oder beim kompilieren durch GTK-Elemente zu ersetzen.

    (Einwurf: Entwickelt man C# per MonoDevelop (o.ä.) auf Linux und benutzt dort Forms (GTK+), sollten diese Programme auch visuell auf dem Raspi unter X laufen, sofern GTK vorhanden ist - aber hier lehne ich mich zu weit raus, da ich das noch nicht im Detail getestet habe.)

    Aber ich habe erst einmal geschaut, dass ich eine Konsolenanwendung (für die Windows-Kommandozeile) schreibe - also eine .exe, die einen Text ausgibt und vielleicht noch eine Eingabe erwartet. Die habe ich (erfolgreich) kompiliert.

    Diese test.exe habe ich dann auf den Raspi geschoben.

    Dann ist mono zu installieren - das Äquivalent zur .net-Runtime auf Windows (bzw. der java-Runtim überall):

    Code
    sudo apt-get install mono-runtime

    Mit

    Code
    mono test.exe


    lässt man das ganze nun laufen - man kann den Aufruf natürlich auch in bash-scripte einbetten usw.

    Und es hat funktioniert. :)

    Nicht nur Windows.Forms-Bibliotheken funktionieren nicht, auch andere Dinge scheinen (noch) nicht unterstützt zu werden. Das ist aber kein Raspi-Thema, sondern ein "was kann Mono unter Linux nicht, was C# unter Windows kann - bis jetzt"-Thema.

    Hinweis: Zur Zeit gehen (ohne weiteres) nur .net-Anwendungen bis zur Framework-Version 3.5 - unabhängig von den verwendeten Bibliotheken.

  • Hey das sind gute Nachrichten, C# ist mir auch sehr ans Herz gewachsen. Wenn ich nächste Woche wieder Interwebz habe werde ich das auch mal testen!
    WinForms hin oder her, mit C# kann man ja noch einiges mehr machen und das komfortabel! :)

  • Ja, genau, z.B. ganz bequem Sockets schreiben oder lesen, Webservices benutzen/bedienen, die seriellen Ports in ihrer "Muttersprache" ansprechen :).

    Aber genau das steht erst als nächstes auf meiner ToDo-Liste... :) Mal sehen, was da alles geht.

  • Hi Leute,

    da ich selber C# Programmiere und früher Delphi hat es mich gefreut als ich gehört habe das es mit c# erfolg gibt. Nur meine eigentliche Frage die ich mir stelle, haben wir denn auch die Möglichkeit dann den I2C-Bus oder GPIO's anzusprechen? Es muss ja nicht unbedingt mit Forms laufen, es müsste Theoretisch reichen wenn es in der Shell läuft und wie in Phyton-Script in einem Loop die eigentlichen Routinen abläuft.

    Grüsse Rudolf

  • Zitat von Rudolf pid=10192 dateline=1365753446


    [...] eigentliche Frage die ich mir stelle, haben wir denn auch die Möglichkeit dann den I2C-Bus oder GPIO's anzusprechen? [...] es müsste Theoretisch reichen wenn es in der Shell läuft und wie in Phyton-Script in einem Loop die eigentlichen Routinen abläuft.

    Was mich betrifft bin ich da noch nicht sehr weit gekommen, aber ich denke mal: Wenn Python es kann, kann's auch C#/Mono - im schlimmsten Fall eben doch über den Aufruf eines Python-Scriptes.
    C# soll und kann ja Python sicher nicht ersetzen, aber für Leute wie mich ist's (erstmal) schneller zu benutzen (Python ist mir neu).

    Dann habe ich mal ein Mini-Testprojekt gemacht, mit folgendem Mini-Ergebnis:

    - 2^4 ergibt nicht 16 sondern Kauderwelsch (d.h. ein Hardwarethema - Hard/Soft-Float als Stichwort, hab mich noch nicht reingelesen) - ist kein Problem bei unmathematischen Tools :)
    - System.Drawing.Bitmap konnte ich (in einer Konsolenanwendung) problemlos initialisieren und Ansprechen (.Width, .Height) - Ziel ist ein Bewegungsmelder auf Webcam-Basis (Bildvergleich mit Offset wegen des Bildrauschens ;) ) -> das scheint schonmal auch nicht unmöglich zu sein.

  • Ja da geht es mir auch so was python betrift, für mich ist es auch zu neu. Was die gpio betrift gibt es hier im Forum schon ein thema dazu Hier.
    will den heute abend auch mal in ruhe lesen.

  • Zitat von MomoOno pid=10194 dateline=1365754122

    Was mich betrifft bin ich da noch nicht sehr weit gekommen, aber ich denke mal: Wenn Python es kann, kann's auch C#/Mono - im schlimmsten Fall eben doch über den Aufruf eines Python-Scriptes.
    C# soll und kann ja Python sicher nicht ersetzen, aber für Leute wie mich ist's (erstmal) schneller zu benutzen (Python ist mir neu).

    Dann habe ich mal ein Mini-Testprojekt gemacht, mit folgendem Mini-Ergebnis:

    - 2^4 ergibt nicht 16 sondern Kauderwelsch (d.h. ein Hardwarethema - Hard/Soft-Float als Stichwort, hab mich noch nicht reingelesen) - ist kein Problem bei unmathematischen Tools :)
    - System.Drawing.Bitmap konnte ich (in einer Konsolenanwendung) problemlos initialisieren und Ansprechen (.Width, .Height) - Ziel ist ein Bewegungsmelder auf Webcam-Basis (Bildvergleich mit Offset wegen des Bildrauschens ;) ) -> das scheint schonmal auch nicht unmöglich zu sein.

    Auch wenn das jetzt Off-Topic ist ;)


    für den Bewegungsmelder auf WebCam Basis gibt es bereits ein linux package (motion => http://packages.debian.org/stable/video/motion).
    Ich habe das gestern ausprobiert (allerdings auf einer normalen linux kiste).

    grundsätzlich find ich mono aufm RPI aber ne gute Idee!
    Ich komme nämlich auch aus der ANSI C/C++/C# Ecke ;)

    in diesem Sinne!

    Gute Nacht!

  • Haha, na Klasse :) Bis auf das Video-Streaming war das genau mein Plan: Bilder in bestimmtem Takt bereitstellen, wie schon gesagt: Bewegung erkennen. Und das auch nur als Konsolenanwendung bzw. als Server, weil wegen an GTK+ trau ich mich noch nicht ran (bzw. haben meine Tests ergeben, dass das alles gaaaanz anders ist als im Visual-Studio-WinForm-Designer).

    Na dann also motion :) (Klar, es gibt immer schon was, man muss nicht immer alles neu machen - aber man kann ja herumspielen. In dem Fall spare ich mir das dann wohl :) man hat ja noch mehr vor mit dem Raspi.)

  • Zitat von Rudolf pid=10195 dateline=1365754595


    Ja da geht es mir auch so was python betrift, für mich ist es auch zu neu. Was die gpio betrift gibt es hier im Forum schon ein thema dazu Hier.
    will den heute abend auch mal in ruhe lesen.

    Hi,

    so hab heute mal Zeit gehabt und mich mit der Klasse von Farin aus dem obigen link beschäftigt, hier noch mal mein Dank an Farin (Falls er es hier mal liest), super Sache. Bei mir funktioniert Sie jetzt (nach kleiner Anpassung).
    Das erleichter jetzt das Programmieren in Mono oder C# für den Pi um einiges. Werde mir die Klasse noch um PMW Funktion erweitern, so das ich Motor Geschwindigkeit steuern kann.

    Hier hab ich noch was gefunden, werde mir das auch noch mal anschauen

    Grüße Rudolf

    Einmal editiert, zuletzt von Rudolf (18. April 2013 um 23:12)

  • Zitat von Rudolf pid=11111 dateline=1366393880


    hier mal noch was link mal schauen was es hier so gibt.

    Ach wie toll ... da kann man ja gleich alles ohne builds testen - sehr nett, hab ich noch gar nichts davon gehört gehabt!

  • hi [font="Tahoma, Verdana, Arial, sans-serif"]MomoOno [/font]

    [font="Tahoma, Verdana, Arial, sans-serif"]ja und was ich auch super finde ist das es eine klasse für die kamera gibt, also wenn du eine usbwebcam am pi hängen hast kannst auf die über mono/C# zugreifen. Was mir noch fehlt ist eine steuerung für motoren (PWM) mal schauen was man da noch machen kann. Über python gehts. Nicht das ich nene mix aus verschiedenen libs/klassen machen muss.[/font]

    Einmal editiert, zuletzt von Rudolf (20. April 2013 um 00:21)

  • Hey,

    ich hab dazu auch mal ne Frage:
    Momentan habe ich bei mir Raspbmc installiert. Ich würde jetzt aber allerdings gerne ein C# Programm ausführen. Bekomme ich Mono irgendwie auf das Raspbmc-OS?
    Und falls ja, wie komme ich von der XBMC-Ansicht in die Konsolenansicht?

    Wenn das mit Mono nicht geht, könnte ich dann mein C#-Programm in Phython umschreiben? Wie bekomme ich es dann zum Laufen unter Raspbmc? Ich will halt ungern 2 verschiedene Betriebssysteme installieren weil ich nur eine SD-Karte habe und es wäre cool wenn ich neben XBMC noch ein kleines Script zum Laufen bringen würde ohne dabei ein komplettes OS aufzusetzen :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!