Programme in VB.NET unter Linux (Mono) ausführen

    • VB.NET

    Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

      Programme in VB.NET unter Linux (Mono) ausführen

      Hallo,

      wie Ihr vielleicht schon bemerkt hab, teste ich seit ein paar Tagen das ein oder andere Programm aus dem Showroom unter Linux.
      Das ist im Prinzip nicht kompliziert, kann aber nützlich sein.

      Meine Wahl der Distribution viel sehr schnell auf openSuse, da sich dieser Hersteller in Deutschland befindet und ich mit YAST ein sehr
      komfortables Tool habe um fehlende Pakete nachinstallieren zu können.
      Aktuell gibt es von openSuse, die Version 12.1 - Download

      Diese kann man bequem in einer Virtuellen Maschine (VM) oder auf einem eigenen PC installieren.

      Die Grundinstallation einer Linux Distribution ist in etwa immer gleich und läuft - zumindest bei mir - immer Problemlos ab.
      Was fehlt ist Mono - die Pakete sind aber in ihrer Anzahl sehr übersichtlich und lassen sich leicht nachinstallieren.

      Ihr benötigt
      1. mono-core
      2. mono.basic

      Zum installieren der Pakete einfach YAST starten und unter Software -> Software installieren oder löschen
      die beiden Pakete auswählen und akzeptieren.

      Debian:
      Download aktuelles Debian Stable Release,
      Wird hier ein jungfräuliches System verwendet, benötigt Ihr nur ein Paket
      1. mono-vbnc

      Das Installieren von Paketen wird hier durch die Synaptic Paketverwaltung erleichtert (vergleichbar mit YAST unter openSuse)

      Danach kann jede dotNet Anwendung (unterstützte Framework Versionen können unterschiedlich sein) im Terminal via
      mono meineAnwendung.exe

      ausgeführt werden.

      Wichtig beim Erstellen einer Anwendung, die unter Mono laufen soll, ist

      1. Keine Windows-Api aufrufe verwenden.
        Linux kennt keine Windows-Api und kann die dll's nicht laden !
      2. Datei-Pfade richtig zusammenbauen
        Da Linux ein / anstatt einem \ für das Trennen von Ordnern verwendet darf ein Pfad niemals mittels & zusammengebaut werden
        Hilfsmittel hier sind Path.DirectorySeparatorChar, Path.VolumeSeparatorChar, Path.InvalidPathChars und Path.Combine
        Alle aus dem System.IO Namespace
      3. Zur Ermittlung der Systempfade die Environment.SpecialFolder-Enum verwenden.
        Nicht alle Pfade die es unter Windows gibt, existieren unter Linux ebenfalls.
        (Hab hierfür ein kleines TestTool geschrieben - siehe Anhang)


      EDIT:
      Anwendung mit Source - SharpDevelop !

      Gruss

      mikeb69
      Dateien

      Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „mikeb69“ () aus folgendem Grund: Must be Liste erweitert; Linux_Environment_Test.zip incl. Source angehängt; Debian

      Wie sieht das aus, wenn das Programm den AppData-Folder aufruft?

      Sonst müsste ich so einiges anpassen ^^

      mfg

      gfc
      Hallo gfcwfzkm,

      VB.NET sucht sich, unter Linux, für die Konstanten aus der Environment.SpecialFolder-Enumeration den richtigen Ordner raus.
      (Welcher das im Einzelnen ist, kann ich dir so auf die schnelle nicht sagen)

      Gruss

      mikeb69
      @Memo,
      das hat nichts mit normalen Dll's zu tun die du im Programmordner mitgeben willst.
      Ich meinte die Dll's aus System32 - Windows Api halt.

      @Seritools,
      hab dann ja das kleine Tool gebaut um das sehen zu können.

      Gruss

      mikeb69
      Wie sieht's dann bei System.Diagnostics aus, also die Process - Klasse?

      Kann man die auch so verwenden, oder muss man das "C:" weglassen? Oder OpenFileDialog, da ich diese sehr brauche...

      mfg

      gfc
      @gfcwfzkm,

      wie das mit System.Diagnostics aussieht weiß ich im Moment nicht.
      Da das aber ein Teil des Frameworks ist sollte es damit aber keine Probleme geben.
      (Werde mein kleines Tool dahingehend erweitern)

      C:\ hat - hart programmiert - sowieso nirgend was zu suchen.
      Weder unter Windows (hat nicht zwangsweise ein Laufwerk C:\) noch unter Linux (hat sicher kein C:\ - Dateisystem sieht ganz anderst aus)

      Der Openfile-Dialog funktioniert - warum auch nicht - ist ja Bestandteil des Frameworks.

      Gruss

      mikeb69
      Wir entwickeln auf Arbeit eine Software unter C++ mit einem C#-Wrapper, die auch unter Linux laufen soll.
      Ein wichtiger Teil der Arbeit war die Umstellung der Backslashes in Pfaden auf Slashs, die laufen sowohl unter Win als auch unter Linux:

      VB.NET-Quellcode

      1. Dim path As String = "C:/Temp/blabla.bla"
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      @gfcwfzkm,

      hab mein Tool mal ein wenig ausgebaut, und siehe da - auch Linux kennt Processe !!!
      (Sourcecode incl. - SharpDevelop !)

      Den AppData-Ordner gibt es unter Linux natürlich nicht.
      Verwendest du Environment.GetFolderPath(SpecialFolder) wird dir aber der passende Ordner für das jeweilige System ausgegeben.

      Pfade sollten sowieso niemals hart codiert werden !

      Gruss

      mikeb69