Alle Beiträge der Kategorie .net

Mittlerweile ist Microsoft beim .Net Framework bei Version 4.6 angekommen.

Bei den ganzen Versionen ist es nicht immer leicht zu erkennen, welche Versionen untereinander kompatibel sind. Oft fragt man sich: laufen Anwendungen, die f√ľr das .Net Framework 1.x geschrieben wurden, auch mit neueren .Net Versionen?

Das .Net Framework kann man zunächst grob aufteilen in die verschiedenen Runtime-Versionen. Es gibt die Runtime Versionen 1, 2 und 4.

Alle .Net 1.x Anwendungen laufen ausschließlich mit der .Net Runtime 1.

Alle .Net 2/3.x Anwendungen laufen ausschlie√ülich mit der Runtime 2, die Bestandteil von .Net 2, .Net 3¬†und.Net 3.5 ist. Dabei laufen Anwendungen, die f√ľr die niedrigeren Versionen geschrieben worden sind, auch unter den h√∂heren Versionen. So ist eine Anwendung f√ľr .Net 2 auch unter .Net 3.5 lauff√§hig.

.Net 3 und .Net 3.5 enthalten Erweiterungen zu .Net 2.

Alle .Net 4.x Anwendungen laufen dementsprechend nur mit der .Net Runtime 4. Diese ist Bestandteil von .Net 4, .Net 4.5 und .Net 4.6. Auch hier ist die Kompatibilität unter höheren Versionen gegeben.

.Net 4.5 ist nicht nur eine Erweiterung der Version 4.0, sondern auch in vielen Bereichen¬†optimiert bez√ľglich Performance. Anwendungen, die f√ľr das Framework .Net 4 programmiert wurden, laufen automatisch performanter, wenn sie auf Rechnern mit dem .Net Framework 4.5 ausgef√ľhrt werden.

Zum Schluss noch eine Grafik zur √úbersicht √ľber die verschiedenen Versionen und die Kompatibilit√§ten.

net-framework-kompatibilitaeten

Als ich wieder mal die ToString() Methode f√ľr ein Objekt √ľberladen habe, um die Eigenschaften eines Objekts sch√∂n formatiert auszugeben, habe ich mich gefragt, ob es vielleicht sinnvoller ist, die Eigenschaften √ľber Reflection zu suchen, statt die Eigenschaften manuell zusammenzuschreiben. Das hat den Vorteil, dass man keine Eigenschaft vergisst, wenn man das Objekt sp√§ter mal erweitern sollte.

Also habe ich Google um Rat gefragt und einer der ersten Suchtreffer war bei StackOverflow,¬†seit einigen Jahren meine bevorzugte Quelle f√ľr Code-Snippets.

Den dort vorgefundenen Code habe ich mal f√ľr ein Beispiel f√ľr den beschriebenen Anwendungsfall adaptiert:

Das Ergebnis sieht so aus:

Name:Semmler
Plz:55435
Stadt:Gau-Algesheim
Strasse:Rheinstraße 40
Vorname:Patrick

Hinweis

Die Methode GetValue() benötigt vor .Net 4.5 noch einen weiteren Parameter Object[] index , der bei nicht indizierten Properties null sein muss.

Diese Woche bin ich auf Visual Studio 2012 umgestiegen.

Als ich heute das erste Mal Unit-Tests mit Visual Studio 2012 erstellen wollte, konnte ich die gewohnte Option im Kontextmen√ľ des Quellcode-Editors nicht finden.

Also Tante Google gefragt, mit dem Ergebnis: Die Option wurde von Microsoft ersatzlos entfernt.

Nach längerem Suchen konnte ich dann doch eine Lösung finden:

Unit Test Generator f√ľr Visual Studio 2012 / 2013

UPDATE 09.02.2016

In Visual Studio 2015 ist die automatische Generierung von UnitTests wieder enthalten!

Gestern habe ich das Upgrade auf Windows 8.1 √ľber den Microsoft Store installiert.

Etwas erstaunt war ich, als ich gesehen habe, das zwar die korrekte Windows-Versionsnummer 6.3 in der Eingabeaufforderung beim „ver“ Kommando angezeigt wird, aber meiner .Net Anwendungen immer noch die Windows 8 Versionsnummer 6.2 ausgegeben haben.

Tante Google hat mich aufklären können: laut dem Artikel http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074%28v=vs.85%29.aspx sind die Funktionen GetVersion() und GetVersionEx() zum Ermitteln der Windows-Version ab Windows 8 deprecated.

Workaround: entweder gibt man im Anwendungsmanifest wie im Artikel beschrieben an, dass Windows 8.1 das Anwendungs-Target ist, oder man liest die Versionsnummer einfach aus der Registry (Schl√ľssel¬†SOFTWARE\Microsoft\Windows NT\CurrentVersion, Wert „CurrentVersion„).

Um auf √Ąnderungen des Powermodus zu reagieren, gibt es das Event PowerModeChanged. Diesem weist man beim Programmstart einen Eventhandler zu:

F√ľr mich gibt es bei der Entwicklung mit C# immer wieder neues zu entdecken. Bei der Google-Suche nach einem Toggle Button (‚ÄúEin-Aus‚ÄĚ-Button) f√ľr Windows Forms bin ich √ľber einen Tipp gestolpert, der vorschl√§gt, bei einer CheckBox das Property ‚ÄúAppearance‚ÄĚ auf ‚ÄúButton‚ÄĚ zu setzen ‚Äď und schon ist ein ToggleButton fertig Smiley

Dasselbe geht √ľbrigens auch mit RadioButtons!

Die folgende Methode habe ich beim c# Seminar in Hamburg erstellt:

Das .net PropertyGrid

Seit ich meine eigenen Tools fast ausschließlich mit c# entwickle, vergeht kein Tag, an dem ich nichts neues entdecke.

Heute habe ich das PropertyGrid kennen gelernt. Das Property Grid ist ein Steuerelement, mit dem man die Attribute eines beliebigen Objekts darstellen und bearbeiten kann (Voraussetzung: die Objekts sind als Properties implementiert). Ich bin durch einen Newsgroup-Beitrag auf diese Komponente aufmerksam geworden und bin einfach nur begeistert!

Ich bin ja seit einigen Wochen f√ľr Tools, die ich f√ľr mich selbst entwickle, mit c# und dem Microsoft .Net Framework unterwegs. Bei meinen Recherchen im Netz bin ich auch √ľber die Seite dotnetperls.com gestolpert. Dort habe ich heute eine ganz nette Erkl√§rung zu der Methode GetDaylightSavingTime() vom DateTime Typ gefunden:

(Erkl√§rung f√ľr nicht-Programmierer und nicht der englischen Sprache m√§chtigen):

Die Methode GetDaylightSavingTime ermittelt, ob das Datum sich innerhalb der Sommerzeit befindet oder nicht. Die Beschreibung der Methode oben lautet:

‚ÄúSommerzeit ist das was dabei rauskommt, wenn wir zulassen, dass unsere Politiker so tun, als w√§ren sie Wissenschaftler. Nicht n√ľtzlich in Arizona.‚ÄĚ

Den zweiten Satz kapiere ich selbst leider nicht. Ich vermute, dass es in Arizona keine Sommerzeit gibt?

DataGridView zu langsam

In den letzten Tagen habe ich mit c# eine Anwendung zur Analyse meiner Mailserver-Logs entwickelt. Das Ergebnis der Auswertung (es wird f√ľr jede empfangene oder gesendete Mail ein Datensatz mit den Maildaten und dem Zustellergebnis generiert) zeige ich in einem dataGridView an.

Leider l√§sst die Performance des DataGridView-Steuerelements bei vielen Elementen zu w√ľnschen √ľbrig. Was also tun? Eine M√∂glichkeit w√§re es, das DataGridView im virtuellen Modus zu betreiben. Das w√§re aber zus√§tzlicher Aufwand. Also habe ich Google bem√ľht und eine L√∂sung daf√ľr gefunden.

Was macht die L√∂sung? √úber eine ‚ÄúExtensionMethod‚ÄĚ wird das Property DoubleBuffered verf√ľgbar gemacht, das dann mit

gesetzt wird.

Ich habe ganze 2 Tage gebraucht, um auf meinem Rootserver Mono zum Laufen zu bringen.

Mit der Anleitung vom Mono-Projekt hatte es leider nicht funktioniert.

Nach vielem Probieren habe ich es dann doch geschafft:

1. etc/apache2/httpd.conf editieren, folgende Zeile einf√ľgen:

2. /srv/www/vhosts/<domainname>/conf/vhost.conf erstellen oder editieren und folgende Einträge vornehmen:

Erklärung:

aspnetapp ist ein Aliasname, der frei gewählt werden kann. Unter diesem Namen wird Mono gestartet.

app ist ein Alias-Name f√ľr das Verzeichnis /aspnet, in dem die Quelldateien der Asp.net Anwendung abgelegt werden.

Zu beachten ist au√üerdem, dass das Verzeichnis mit der Asp.net Anwendung Leserechte f√ľr andere zugewiesen bekommt.

3. ausf√ľhren: /usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=<domain-name.de>

4. /etc/init.d/apache2 restart