seeseekey.net - Invictus Deus Ex Machina

Wenn man mittels Mono eine Anwendung entwickeln möchte, so wird man dafür in den meisten Fällen MonoDevelop oder Xamarin Studio nutzen. Xamarin ist die Firma welche Mono entwickelte (über Ximian und später Novel). Allerdings ist nicht wirklich klar wo sich die beiden IDE’s voneinander unterscheiden, den bei beiden scheint es sich im Kern um MonoDevelop zu handeln.

Xamarin Studio mit geöffnetem Projekt

Wie auf der Mailingliste klargestellt wurde handelt es sich bei Xamarin Studio um eine MonoDevelop-Version welche um einige Add-Ins für iOS und Android sowie andere Funktionen erweitert wurde. Der Quelltext von MonoDevelop ist wie gehabt auf GitHub zu finden.

Manchmal ist Mono Develop etwas undurchsichtig. So bekam ich bei einem Projekt welches ich neu kompilieren wollte mehrmals die Fehlermeldung:

Error CS1904: `' is not a valid warning number (CS1904) (CSCL)

Der Compiler beschwert sich hierbei darüber, das eine spezifizierte Warnungsnummer nicht existiert. Allerdings ist es schwierig eine nicht vorhandene Nummer zu finden.

Die Compiler Optionen

Die Lösung lag in den Compiler Optionen des Projektes. Hier befand sich unter „Warnungen ignorieren“ die Zeile:

0168 ; 0169; 0414; 0618; 0649

Das Problem an dieser Zeile waren die Leerzeichen, welche von MonoDevelop als zu ignorierende Warnungen interpretiert wurden. Und eine Warnung ohne Nummer kennt das System natürlich nicht. Nach dem Entfernen der Leerzeichen, kompilierte auch das Projekt wieder.

Nach der Änderung des Projektes von „Debug|x86“ zu „Debug“ (AnyCPU) meldete sich MonoDevelop mit der Meldung:

invalid configuration mapping

Das Problem liegt hier aber nicht am Projekt selbst, sondern an der Projektmappe (Solution).

Die fehlerhaften Einstellungen in der Projektmappe

Diese erreicht man indem man auf die Wurzel der Mappe klickt und dort den Punkt „Optionen“ auswählt. Unter „Erstellen“ -> „Konfigurationen“ findet man dann den Übeltäter. Hier erstellt man neue Konfigurationen und entfernt die alten. Danach sollte es mit dem umgestellten Projekt keinerlei Probleme mehr geben.

Bei der Entwicklung wundert man sich ab und an, was für interessante Projekte in den Weiten des Netzes so umherschwirren. So unter anderem das Projekt Script#. Dabei handelt es sich um eine Erweiterung für das Visual Studio 2012 mit welcher es möglich ist C# Quelltext (so er gewissen Kriterien genügt) in JavaScript umzuwandeln, bzw. zu compilieren.

Die Erweiterung welche im Quelltext unter https://github.com/nikhilk/scriptsharp zu finden ist, steht dabei unter der Apache Lizenz und ist somit freie Software. Nach der Installation fügt sie dem Visual Studio neue Projekttypen hinzu, mit welchen man anschließend arbeiten kann. Leider gibt es von Script# keine MonoDevelop Variante, so das man im Moment zwingend an das Visual Studio gebunden ist. Allerdings findet sich in der Roadmap folgender Satz:

In terms of code contribution, it would be especially interesting to see the development of import libraries for common libraries, so they are easily usable right out of the box. It would also be interesting to see the development of complementary tools/addins, adding support to other IDEs (esp. MonoDevelop) and other such complementary projects. Or you might be interested in the very core, i.e. the compiler itself.

Also wenn sich jemand bemüßigt fühlt, das ganze für MonoDevelop in Angriff zu nehmen, der muss nun nicht mehr auf die Einladung warten. Die offizielle Projektseite von Script# ist unter http://scriptsharp.com/ zu finden.

Manchmal kommt es vor, das man mehrere Instanzen von MonoDevelop unter Mac OS X benötigt. Allerdings wird man feststellen das dies nicht ohne weiteres möglich ist da OS X nur eine Instanz öffnet. Hier hilft es dann im Terminal:

open -n /Applications/MonoDevelop.app

einzugeben. Damit wird das System gezwungen eine neue Instanz von MonoDevelop anzulegen. Eine andere Methode wäre es eine Kopie von MonoDevelop anzulegen und diese z.B. „MonoDevelop 2″ zu nennen, was aber in meinen Augen keinen Sinn macht, da es auf eine Verschwendung von Speicherplatz hinausläuft.

Vor einiger Zeit hatte ich einen Artikel darüber geschrieben, was mich an MonoDevelop stört. Seit heute gibt es da noch eine weitere Sache. So kann man in MonoDevelop Ausdrücke und Variablen auswerten, was bei der Entwicklung doch sehr praktisch ist.

Das Fenster zum Überwachen von Ausdrücken und Variablen

Problematisch wird es dann, wenn das Fenster dazu verleitet nach Fehlern zu suchen, die eigentlich nicht existent sind. So kürzt es automatisch den Wert der überwachten Variable ein. Selbst wenn man auf „Kopieren“ drückt, wird nur die gekürzte Fassung in die Zwischenablage geschoben. Dadurch kann es dann passieren das man anstatt:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

den Wert:

"ABCDEFGHIJKLMNOPQRS..."

auswertet. Möchte man an dieser Stelle ganz sicher sein, so hilft nur der umständliche Weg über die Lupe, in welcher der ganze Wert in einem extra Fenster angezeigt wird.

Unter Mac OS X schreibt man ein Back­slash mittels der Tasten „Umschalt + Alt + 7″. Dies funktioniert auch überall, nur bei MonoDevelop gibt es dort einige Probleme. MonoDevelop hält das ganze für einen Shortcut, was dazu führt das es die entsprechende Funktion ausführt. Nur von dem Backslash ist nichts zu sehen.

Die Einstellung der Tastenbindungen

Um dies zu ändern geht man in den Einstellungen und auf den Punkt „Tastenbindungen“ und sucht dort nach „dyna“. Damit wird die entsprechend belegte Taste gefunden, welche nun umbelegt werden kann. Anschließend funktioniert auch das Backslash in MonoDevelop wieder.

Weitere Informationen gibt es unter:
https://bugzilla.xamarin.com/show_bug.cgi?id=6527

Bei einem C# Projekt von mir, welches ich in Visual Studio und MonoDevelop bearbeite, gab es einige Probleme mit dem debuggen. Unter MonoDevelop reichte es die Hauptklasse anzugeben, so das er in diese springen konnte.

Bei Visual Studio fruchtete dies leider nicht. Dort stellt sich die Frage ob es eventuell eine Inkompatibilität zwischen den Projektdateien gibt. Hier ist wohl weitere Forschung nötig.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/MonoDevelop
http://de.wikipedia.org/wiki/Visual_Studio

MonoDevelop an sich ist eine schöne Entwicklungsumgebung für das Schreiben von Mono Anwendungen. Allerdings sind mir im Laufe der letzten Tage einige unschöne Dinge an MonoDevelop aufgefallen, welche dem Entwickler doch ziemlich nerven:

  • Mono startet augenscheinlich nie maximiert
  • die Optionen können nicht importiert und exportiert werden
  • der letzte View wird sich nicht gemerkt, beim Start wird immer der Default View benutzt
  • die Codeformatierung aktiviert sich nicht nach dem schließen einer geschweiften Klammer
  • Dateien können von Projekt zur Projekt verschoben werden, aber nicht in andere Ordner
  • es gibt kein Symbol zum Aus– und Einkommentieren in der Toolbar
  • keine Blockeditierfunktion (vertikales Editieren)
  • keine Option vorhanden um alle #region Objekte auf einmal zu schließen
  • anscheinend merkt sich MonoDevelop nicht ob eine Region geschlossen oder geöffnet war

An sich sind es viele Kleinigkeiten, die einen allerdings mit der Zeit doch ziemlich behindern und nerven. Dort sollte nachgebessert werden, damit die Entwicklung mit MonoDevelop mehr Spaß macht und produktiver wird :)

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/MonoDevelop
http://wiki.ubuntuusers.de/entwicklungsumgebungen

Wer auf der Suche nach der neusten Version von MonoDevelop (2.8) ist und diese unter Ubuntu benötigt der sollte sich das PPA „ppa:keks9n/monodevelop-latest“ anschauen. Mittels

sudo add-apt-repository ppa:keks9n/monodevelop-latest
sudo apt-get update && sudo apt-get dist-upgrade

kann man das ganze im Terminal aktualisieren.

Danach wird man von der Version 2.8.2 begrüßt :)

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/MonoDevelop
https://launchpad.net/~keks9n/+archive/monodevelop-latest