Tuesday, June 14, 2005

Entwickeln für das Dotnet-Compact Framework mit Hilfe von DotGnu

Heute ist ein glorreicher Tag: Erstmals funktioniert ein unter Linux compiliertes C#-Programm auch auf einem WindowsCE.net-Gerät.

Und so geht's: erstmal besorgt man sich die passende CAB-Datei mit dem .net-cf, in meinem Fall
netcf.all.wce4.ARMV4.cab. Die findet man, indem man den CompactFramework-Installer von MS runterlädt und unter Windows installiert; bei mir war sie dann unter c:\Programme\Microsoft .NET Compact Framework 1.0 SP3\ zu finden.

Diese Datei wird mittels cabextract ausgepackt. Dabei kann man eigentlich nix falsch machen ;-)
Anschliessend muss man die DLLs umbennen. Ich erzähle hier die allgemeingültige Version, damit es auch für andere Versionen passt:
Im Ordner liegen Dateien rum, z.B.

00system.013 cgacutil.003 CULTUR~2.009 MICROS~3.022 NEA3F6~1.000 NETCFA~1.005 SY5DD4~1.016 SYC6B2~1.015 0mscoree.001 CHARIN~1.007 CULTUR~3.010 MSCORE~1.002 NETCF1~1.004 REGION~1.011 SY9B57~1.017 SYD8C9~1.014 CALEND~1.006 CULTUR~1.008 MICROS~2.021 mscorlib.012 NETCF_~1.999 SY40C7~1.018 SYB769~1.019 SYSTEM~2.020

Einige dieser Dateien sind DLLs; mittels strings und grep findet man raus, ob es sich um eine DLL handelt und wie diese heissen soll:

$ strings SYSTEM~2.020|grep pdb
m:\V1\SP3\4292\Profile4\BCL\bin\release\System.Data.pdb

Diese Datei soll also System.Data.dll heissen. Das macht man dann der Reihe nach; die Dateien, die keine DLLs sind, kann man löschen. Manche der DLLs sind binär und damit ebenfalls unnötig, aber das merkt man eh', wenn man sie linken will ;-)

Tja, und dann muss man nur noch das Programm gegen diese DLLs linken und schon hat man ein Executable, dass auch auf mobilen Geräten läuft! Mein Programm braucht System.Windows.Forms und System.Xml; weiters wird das SourceGridMini verwendet.
Der Befehl zum Compilieren sieht wie folgt aus (alle Dateien in ein Verzeichnis reingeschmissen):

cscc *.cs -lSystem.Windows.Forms -lmscorlib.dll -lSourceGridMini.dll -lSourceLibraryMini.dll -lSystem.dll -lSystem.Drawing.dll -lSystem.Xml.dll -o DotGnuProgramm.exe

Und dann kopiert man DotGnuProgramm.exe zusammen mit SourceGridMini.dll und SourceLibraryMini.dll) auf das Gerät und siehe da, es funktioniert!

Nachtrag vom 28.1.2006:
Warnung: Nach dieser Anleitung erstellte Programme nicht ohne ausführliche Tests produktiv einsetzen; manche so erzeugten Programme frieren häufig ein, während andere problemlos laufen.

Hier gibt's ein kleines von mir geschriebenes Programm zum Runterladen, mit dem man auch CAB-Dateien für das .net cf erstellen kann. Diese CAB-Dateien lassen sich dann auf allen .net-cf Plattformen installieren, weil der (in von VisualStudio erzeugten CAB-Dateien enthaltene) binäre Code wegfällt, der prüft, ob das .net-cf auf dem Gerät installiert ist.

Ganz praktisch ist dieses Tool auch, um speziell angepasste CAB-Dateien zu produzieren. Wenn man z.B. das gleiche Programm an mehrere Kunden ausliefert, aber jedem eine speziell angepasste Konfigurationsdatei im CAB mitgeben will, geht das mit diesem Tool ganz prima. Wobei man aber aufgrund der oben erwähnten Problematik eher auf eine vom VisualStudio erzeugte EXE-Datei zurückgreifen sollte, falls man diese Möglichkeit hat.

0 Comments:

Post a Comment

<< Home