seeseekey.net - Invictus Deus Ex Machina

Wenn man mit­tels Mono eine Anwen­dung ent­wi­ckeln möchte, so wird man dafür in den meis­ten Fäl­len Mono­De­ve­lop oder Xama­rin Stu­dio nut­zen. Xama­rin ist die Firma wel­che Mono ent­wi­ckelte (über Ximian und spä­ter Novel). Aller­dings ist nicht wirk­lich klar wo sich die bei­den IDE’s von­ein­an­der unter­schei­den, den bei bei­den scheint es sich im Kern um Mono­De­ve­lop zu handeln.

Xama­rin Stu­dio mit geöff­ne­tem Projekt

Wie auf der Mai­ling­liste klar­ge­stellt wurde han­delt es sich bei Xama­rin Stu­dio um eine MonoDevelop-Version wel­che um einige Add-Ins für iOS und Android sowie andere Funk­tio­nen erwei­tert wurde. Der Quell­text von Mono­De­ve­lop ist wie gehabt auf Git­Hub zu fin­den.

Manch­mal ist Mono Deve­lop etwas undurch­sich­tig. So bekam ich bei einem Pro­jekt wel­ches ich neu kom­pi­lie­ren wollte mehr­mals die Fehlermeldung:

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

Der Com­pi­ler beschwert sich hier­bei dar­über, das eine spe­zi­fi­zierte War­nungs­num­mer nicht exis­tiert. Aller­dings ist es schwie­rig eine nicht vor­han­dene Num­mer zu finden.

Die Com­pi­ler Optionen

Die Lösung lag in den Com­pi­ler Optio­nen des Pro­jek­tes. Hier befand sich unter „War­nun­gen igno­rie­ren“ die Zeile:

0168 ; 0169; 0414; 0618; 0649

Das Pro­blem an die­ser Zeile waren die Leer­zei­chen, wel­che von Mono­De­ve­lop als zu igno­rie­rende War­nun­gen inter­pre­tiert wur­den. Und eine War­nung ohne Num­mer kennt das Sys­tem natür­lich nicht. Nach dem Ent­fer­nen der Leer­zei­chen, kom­pi­lierte auch das Pro­jekt wieder.

Nach der Ände­rung des Pro­jek­tes von „Debug|x86“ zu „Debug“ (AnyCPU) mel­dete sich Mono­De­ve­lop mit der Meldung:

invalid configuration mapping

Das Pro­blem liegt hier aber nicht am Pro­jekt selbst, son­dern an der Pro­jekt­mappe (Solution).

Die feh­ler­haf­ten Ein­stel­lun­gen in der Projektmappe

Diese erreicht man indem man auf die Wur­zel der Mappe klickt und dort den Punkt „Optio­nen“ aus­wählt. Unter „Erstel­len“ -> „Kon­fi­gu­ra­tio­nen“ fin­det man dann den Übel­tä­ter. Hier erstellt man neue Kon­fi­gu­ra­tio­nen und ent­fernt die alten. Danach sollte es mit dem umge­stell­ten Pro­jekt kei­ner­lei Pro­bleme mehr geben.

Bei der Ent­wick­lung wun­dert man sich ab und an, was für inter­es­sante Pro­jekte in den Wei­ten des Net­zes so umher­schwir­ren. So unter ande­rem das Pro­jekt Script#. Dabei han­delt es sich um eine Erwei­te­rung für das Visual Stu­dio 2012 mit wel­cher es mög­lich ist C# Quell­text (so er gewis­sen Kri­te­rien genügt) in Java­Script umzu­wan­deln, bzw. zu compilieren.

Die Erwei­te­rung wel­che im Quell­text unter https://github.com/nikhilk/scriptsharp zu fin­den ist, steht dabei unter der Apa­che Lizenz und ist somit freie Soft­ware. Nach der Instal­la­tion fügt sie dem Visual Stu­dio neue Pro­jekt­ty­pen hinzu, mit wel­chen man anschlie­ßend arbei­ten kann. Lei­der gibt es von Script# keine Mono­De­ve­lop Vari­ante, so das man im Moment zwin­gend an das Visual Stu­dio gebun­den ist. Aller­dings fin­det sich in der Road­map fol­gen­der Satz:

In terms of code con­tri­bu­tion, it would be espe­cially inte­res­ting to see the deve­lop­ment of import libra­ries for com­mon libra­ries, so they are easily usa­ble right out of the box. It would also be inte­res­ting to see the deve­lop­ment of com­ple­men­tary tools/addins, adding sup­port to other IDEs (esp. Mono­De­ve­lop) and other such com­ple­men­tary pro­jects. Or you might be inte­res­ted in the very core, i.e. the com­pi­ler itself.

Also wenn sich jemand bemü­ßigt fühlt, das ganze für Mono­De­ve­lop in Angriff zu neh­men, der muss nun nicht mehr auf die Ein­la­dung war­ten. Die offi­zi­elle Pro­jekt­seite von Script# ist unter http://scriptsharp.com/ zu finden.

Manch­mal kommt es vor, das man meh­rere Instan­zen von Mono­De­ve­lop unter Mac OS X benö­tigt. Aller­dings wird man fest­stel­len das dies nicht ohne wei­te­res mög­lich ist da OS X nur eine Instanz öff­net. Hier hilft es dann im Terminal:

open -n /Applications/MonoDevelop.app

ein­zu­ge­ben. Damit wird das Sys­tem gezwun­gen eine neue Instanz von Mono­De­ve­lop anzu­le­gen. Eine andere Methode wäre es eine Kopie von Mono­De­ve­lop anzu­le­gen und diese z.B. „Mono­De­ve­lop 2″ zu nen­nen, was aber in mei­nen Augen kei­nen Sinn macht, da es auf eine Ver­schwen­dung von Spei­cher­platz hinausläuft.

Vor eini­ger Zeit hatte ich einen Arti­kel dar­über geschrie­ben, was mich an Mono­De­ve­lop stört. Seit heute gibt es da noch eine wei­tere Sache. So kann man in Mono­De­ve­lop Aus­drü­cke und Varia­blen aus­wer­ten, was bei der Ent­wick­lung doch sehr prak­tisch ist.

Das Fens­ter zum Über­wa­chen von Aus­drü­cken und Variablen

Pro­ble­ma­tisch wird es dann, wenn das Fens­ter dazu ver­lei­tet nach Feh­lern zu suchen, die eigent­lich nicht exis­tent sind. So kürzt es auto­ma­tisch den Wert der über­wach­ten Varia­ble ein. Selbst wenn man auf „Kopie­ren“ drückt, wird nur die gekürzte Fas­sung in die Zwi­schen­ab­lage gescho­ben. Dadurch kann es dann pas­sie­ren das man anstatt:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

den Wert:

"ABCDEFGHIJKLMNOPQRS..."

aus­wer­tet. Möchte man an die­ser Stelle ganz sicher sein, so hilft nur der umständ­li­che Weg über die Lupe, in wel­cher der ganze Wert in einem extra Fens­ter ange­zeigt wird.

Unter Mac OS X schreibt man ein Back­slash mit­tels der Tas­ten „Umschalt + Alt + 7″. Dies funk­tio­niert auch über­all, nur bei Mono­De­ve­lop gibt es dort einige Pro­bleme. Mono­De­ve­lop hält das ganze für einen Short­cut, was dazu führt das es die ent­spre­chende Funk­tion aus­führt. Nur von dem Back­slash ist nichts zu sehen.

Die Ein­stel­lung der Tastenbindungen

Um dies zu ändern geht man in den Ein­stel­lun­gen und auf den Punkt „Tas­ten­bin­dun­gen“ und sucht dort nach „dyna“. Damit wird die ent­spre­chend belegte Taste gefun­den, wel­che nun umbe­legt wer­den kann. Anschlie­ßend funk­tio­niert auch das Back­slash in Mono­De­ve­lop wieder.

Wei­tere Infor­ma­tio­nen gibt es unter:
https://bugzilla.xamarin.com/show_bug.cgi?id=6527

Bei einem C# Pro­jekt von mir, wel­ches ich in Visual Stu­dio und Mono­De­ve­lop bear­beite, gab es einige Pro­bleme mit dem debug­gen. Unter Mono­De­ve­lop reichte es die Haupt­klasse anzu­ge­ben, so das er in diese sprin­gen konnte.

Bei Visual Stu­dio fruch­tete dies lei­der nicht. Dort stellt sich die Frage ob es even­tu­ell eine Inkom­pa­ti­bi­li­tät zwi­schen den Pro­jekt­da­teien gibt. Hier ist wohl wei­tere For­schung nötig.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/MonoDevelop
http://de.wikipedia.org/wiki/Visual_Studio

Mono­De­ve­lop an sich ist eine schöne Ent­wick­lungs­um­ge­bung für das Schrei­ben von Mono Anwen­dun­gen. Aller­dings sind mir im Laufe der letz­ten Tage einige unschöne Dinge an Mono­De­ve­lop auf­ge­fal­len, wel­che dem Ent­wick­ler doch ziem­lich nerven:

  • Mono star­tet augen­schein­lich nie maximiert
  • die Optio­nen kön­nen nicht impor­tiert und expor­tiert werden
  • der letzte View wird sich nicht gemerkt, beim Start wird immer der Default View benutzt
  • die Code­for­ma­tie­rung akti­viert sich nicht nach dem schlie­ßen einer geschweif­ten Klammer
  • Dateien kön­nen von Pro­jekt zur Pro­jekt ver­scho­ben wer­den, aber nicht in andere Ordner
  • es gibt kein Sym­bol zum Aus– und Ein­kom­men­tie­ren in der Toolbar
  • keine Blo­cke­di­tier­funk­tion (ver­ti­ka­les Editieren)
  • keine Option vor­han­den um alle #region Objekte auf ein­mal zu schließen
  • anschei­nend merkt sich Mono­De­ve­lop nicht ob eine Region geschlos­sen oder geöff­net war

An sich sind es viele Klei­nig­kei­ten, die einen aller­dings mit der Zeit doch ziem­lich behin­dern und ner­ven. Dort sollte nach­ge­bes­sert wer­den, damit die Ent­wick­lung mit Mono­De­ve­lop mehr Spaß macht und pro­duk­ti­ver wird :)

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/MonoDevelop
http://wiki.ubuntuusers.de/entwicklungsumgebungen

Wer auf der Suche nach der neus­ten Ver­sion von Mono­De­ve­lop (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 Ter­mi­nal aktualisieren.

Danach wird man von der Ver­sion 2.8.2 begrüßt :)

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/MonoDevelop
https://launchpad.net/~keks9n/+archive/monodevelop-latest