.NET Framework 4.5 und Visual Studio 2012 steht in den Startlöchern

Microsoft bemüht sich redlich um seine Entwicklergemeinde. Nach dem Paukenschlag mit Windows 8 und der Metro-Oberfläche, in der Flash und Silverlight einfach nicht existieren, sickern so nach und nach die ersten Erfahrungen mit den Previews des neuen Frameworks 4.5 und VS 2012 (oder auch VS11) durch. Wer diese Erfahrungen auch machen möchte: am Ende des Artikels sind die Links zu den Previews aufgeführt. Happy Coding ;-).

Das Framework soll als Aufsatz auf 4.0 verstanden werden, dabei aber auch 4.0-Teile beschleunigen und vereinfachen. So wird beispielsweise das bereits in c# bekannte „Yield“ für die Iteration in Schleifen nun auch in VB.Net Einzug halten. Durch die neuen Schlüsselworte „async“ und „await“ wird die asynchrone Verarbeitung, also das Abarbeiten mehrerer Aufgaben gleichzeitig, wesentlich einfacher.

Auch für die Webentwickler, und damit auch evtl. für Windows 8 Metro, ist was dabei: HTML5-Unterstützung, und CSS3 soll auch verstanden werden. Das wiederum muss Auswirkungen auf die Intellisense-Funktion der Editoren haben. Das erstmalige Starten läuft dank Multicore-Just-In-Time-Compile spürbar schneller ab, es wird von ca. 35% Zeitersparnis geredet.

Dr. Holger Schwichtenberg hat in seinem Lexikon einige der Neuerungen aufgeführt, hier die wesentlichen Links dazu:

Das neue Framework 4.5, Webentwicklung mit 4.5 und VisualStudio 2012 (VS11).

Jon Galloway von Microsoft gibt in seinem Blog ein wenig mehr Einblick über die neuen ASP MVC-Umgebung und erklärt dabei auch Details.

Besser, schneller, breiter, verwirrender. Ich möchte nicht behaupten, alle Funktionen im Framework 2.0 zu kennen. Und Welten liegen da noch bis zur Version 4.0. Da ist es doch schön, das sich der Abstand dann bis zur 4.5 noch vergrößert. Das spornt an, einmal wieder etwas neues zu entdecken. Das Framework… unendliche Weiten…

Hier kann man die Previews als Entwickler herunterladen:

Framework 4.5

Visual Studio 2012

Voraussetzung ist dabei Windows 7 oder Windows Server 2008; XP scheidet wohl aus, zumal das OS ab 2014 generell nicht mehr unterstützt werden soll.

Und das Erscheinungsdatum? Nun ja, Visual Studio wird auch unter VisualStudio2013 gehandelt! Vor dem Herbst 2012 wäre ein Release also eher eine Überraschung.

Wie gesagt: happy coding!

Advertisements

Wie finde ich bei Problemen ohne konkretes Stichwort die Lösung?

Wir benutzen in unseren ASP.Net-Projekten häufig an Stelle der Standard-Grid-Komponente das Grid von ComponentArt (siehe hier: ComponentArt). Kommerzielle Komponenten erlauben einfach viel mehr Möglichkeiten in der Gestaltung der Webanwendung, da häufig genutzte Funktionen, die es in der Standardkomponenten nicht gibt, dort eingebunden sind und fast so genutzt werden können, als wären wir in einer Windows-Client-Umgebung und nicht im Web.

Dummerweise machen diese Erweiterungen einem manchmal auch das Leben schwer. Schwer beim Auffinden. Welche der tausend Eigenschaften ist denn nun zu setzen? Wie könnte der Hersteller denn das genannt haben, was ich hier brauche?

So erging es mir vor kurzem, als ich in einem DataGrid einen bestimmten, sprachabhängigen Text anzeigen wollte, wenn keine Daten vorhanden waren. Standardmäßig wird nämlich nur, richtig, ein leeres Grid angezeigt, was für den Benutzer nicht immer so einleuchtend ist.

Klingt ja so einfach, die Eigenschaft zu finden: Online-Hilfe des Herstellers öffnen, nach dem Begriff suchen und dort mal kurz durchlesen. Hm, welchen Begriff soll ich denn aber suchen? Am besten mal schnell in den Index, da sind ja alle Stichwörter schön gesammelt. Da wird sich schon das richtige finden. Weit gefehlt!

Wer nicht weiß, welchen Begriff sich der Autor der Online-Hilfe hat einfallen lassen, um etwas zu beschreiben, der wird dort untergehen!

Die Online-Hilfe hilft nun einmal nicht, wenn man nicht weiß, wie man (= mit welchem Begriff) suchen soll. Da muss man stundenlang die Hilfe lesen, um zu erkennen, dass man noch immer keine Antwort gefunden hat.

Aber es gibt Abhilfe: Das Forum. Hier beschreiben gleichgeplagte Ihre Probleme, und zwar mit den Worten, wie sie der Anwender des Controls nutzt, und nicht wie sie der Hersteller sieht! Wenn das Forum gut moderiert wird, erhalten alle umgehend eine passende Antwort, entweder von Benutzern selbst, die einfach anderen helfen wollen oder vom Hersteller. Und auch wenn die Antwort nicht ganz passt: man erhält jedenfalls schnell einen Hinweis, in welche Richtung man suchen sollte. Noch schöner ist es aber, wenn die Frage, die einen quält, schon einmal in dem Forum gestellt wurde und Antworten vorhanden sind. Dann kann man gleich Vollgas weiterarbeiten.

Einige Hersteller haben das Werkzeug „Forum“ schon längst als weiteres Marketinginstrument erkannt und unterstützen die Aktivitäten, die dort ablaufen, mit viel Manpower durch Moderatoren. Dadurch gewinnen alle: Der Hersteller, weil er schnell Probleme lösen kann, und der Anwendungsentwickler, weil er schnell eine Antwort findet. Außerdem erhält der Hersteller einen sehr guten Einblick in die Probleme, mit denen die Anwender zu kämpfen haben. Das kann dann wiederum in neue Versionen einfließen.

Umgekehrt haben Hersteller, die Foren nur bedingt unterstützen, eher geringen Erfolg. Controls sind die Suppe. Foren sind das Salz dazu!

Aber auch hier gilt: „Gibt, so werdet Ihr bekommen“. Foren leben, wie social Networks, vom mitmachen. Ich bin in einigen dabei. Wie sieht es bei Ihnen aus?

P.S.:

Ich möchte Ihnen nicht vorenthalten, wie die Lösung zu meinem Eingangs erwähnten Problem ist.

„EmptyGridText“ ist die gesuchte Eigenschaft. Hier ein Beispiel:

</pre>
MeinGrid.EmptyGridText = "Es wurden keine Daten gefunden"
<pre>

Gefunden im Forum des Herstellers. Nach „EmptyGridText“ hatte ich in der Online-Hilfe übrigens nie gesucht ;-).

VisualStudio 2010: Absturz beim Öffnen oder Schließen einer Webseite

In VisualStudio 2005 waren Webanwendungen nicht als Project mit einer Solution (.SLN) anzulegen, sondern vielmehr als „Website“. Das ist dann eher eine Dateiablage und -ansammlung aller für die Webanwendung notwendigen Dateien in einem bestimmten Ordner. Zum Öffnen dieser Webanwendung in Visualstudio geht daher auch nicht ein Doppelklick auf die SLN-Datei (die gibt es ja eben nicht), sondern man muss über „Datei – Website öffnen“ den Ordner auswählen. Anschließend wird alles geladen, was da so rumliegt.

Das Funktioniert auch noch so in VisualStudio 2008 und 2010. Wobei man hier auch wieder „Webprojekte“ mit aufgenommen hat und NEUE Webanwendungen dann doch wieder wie auch Windowsanwendungen als Solution ablegen kann. Wer aber dennoch reine „Website“-Projekte hat, kann diese dann auch wieder über „Datei – Website öffnen…“ aufmachen.

In VisualStudio 2010 hat sich hier aber ein Fehler eingeschlichen: Es kann unter Umständen zu einem Absturz des VisualStudio kommen, und die Webanwendung kann nicht geöffnet werden. Mir ist das in nicht nachvollziehbaren Schritten immer wieder passiert.

Hat VisualStudio 2010 dann aber nach mehreren Anläufen die Website geöffnet, kommt es beim Schließen zu einem Absturz. Was nicht besonders schlimm ist, würde ich nur nicht immer wieder vergessen, den Haken bei „VisualStudio wieder starten“ raus zu nehmen. Denn dann schließt sich die Entwicklungsumgebung und startet erneut, was natürlich nicht in meinem ursprünglichem Interesse war, als ich die Website schließen wollte.

Abhilfe schafft hier das ServicePack 1 für VisualStudio2010. Hier der Link zu der Beschreibung des ServicePack auf der Microsoft Seite: http://support.microsoft.com/kb/983509/de
Und der eigentliche Installer: Microsoft Visual Studio 2010 Servicepack 1

Aber Achtung: Der Link ladet nur einen Installer herunter. Das geht überraschend flott, sind ja auch nur 800 kb. Nach dem Starten des Installers untersucht das Setup die bestehende Installation und lädt anschließend das passende ServicePack-Paket herunter, was dann 300 MB sein können. Ist das erledigt, geht die eigentliche Installation des ServicePack vonstatten. Dazu sollten Sie zu Beginn immer wieder auf den Bildschirm schauen, da Sie hier die Installation und die Optionen bestätigen müssen! Ein bis zwei Stunden ist der Rechner dann schon beschäftigt, um das ServicePack zu installieren!

Belohnt werden Sie dann aber mit einem Öffnen und Schließen von Websites, ohne das es zu Abstürzen kommt!

P.S.: natürlich sind noch viele andere Fehler durch dieses ServicePack ausgemerzt. Details dazu finden Sie hier http://support.microsoft.com/kb/983509/de oder hier http://support.microsoft.com/kb/983509/en.

NET-Framework 2.0: Läuft meine Anwendung aktuell in einem 64-Bit-Betriebssystem?

Windows gibt es seit der Version XP auch als 64-Bit-Version. Richtig durchgesetzt hat sich das aber erst seit dem grandiosen Start von Windows 7. Nahezu 50der Rechner laufen hier unter der superschnellen 64-Spuren-Stadtautobahn, Tendenz steigend.

Da 32-Bit- und 64-Bit-Betriebssysteme sich auch in ihrer Reaktion unterscheiden und teilweise verschiedene Verfahren für Berechtigungen haben, ist es manchmal innerhalb einer .NET-Anwendung notwendig zu wissen, auf welcher Version die Anwendung gerade läuft. Dummerweise war zur Einführung von .NET Framework 2.0 noch nicht bekannt, dass es einmal Win7-64 geben wird, und so kann man auch nicht einfach auf einen Namespace zugreifen, der einem das sagt.

Aber es gibt auch in .NET Framework 2.0 eine Möglichkeit, mit Hilfe der Kernel.dll herauszufinden, auf wieviel Bit-Spuren man unterwegs ist. Hier mein Vorschlag:

' Namespace InteropServices wird benoetigt
Imports System.Runtime.InteropServices

    ''' <summary>Globales Modul ob OS 64-Bit ist</summary>
    Module Check64BitOS

        ''' <summary>
        ''' Die public-Funktion kann aufgerufen werden, um ein 64-Bit-Betriebssystem zu entdecken
        ''' </summary>
        ''' <returns>True wenn 64-Bit-System</returns>
        Public Function Is64BitOperatingSystem() As Boolean
            If ( IntPtr.Size = 8 ) Then  ' Nur 64-bit kann mit dieser Size arbeiten (32-Bit = 4)
                Return True
            Else  ' 32-bit Programme koennen auch im 64-Bit Modus laufen, daher ist der Prozess zu pruefen
                Dim flag As Boolean
                Return ((DoesWin32MethodExist("kernel32.dll", "IsWow64Process") _
                         AndAlso IsWow64Process(GetCurrentProcess, flag)) AndAlso flag)
            End If
        End Function

        ''' <summary>Diese kleine Funktion prüft, ob
        '''          a) eine Bibliothek existiert und
        '''          b) eine Methode innerhalb dieser Methode existiert
        ''' </summary>
        ''' <param name="moduleName">zu untersuchender Modulname</param>
        ''' <param name="methodName">zu suchende Methode</param>
        ''' <returns>True wenn Modul und Methode existieren</returns>
        Function DoesWin32MethodExist(ByVal moduleName As String, ByVal methodName As String) As Boolean
            Dim moduleHandle As IntPtr = GetModuleHandle(moduleName)
            If (moduleHandle = IntPtr.Zero) Then
                Return False
            End If
            Return (GetProcAddress(moduleHandle, methodName) <> IntPtr.Zero)
        End Function

        <DllImport("kernel32.dll")> _
        Function GetCurrentProcess() As IntPtr
        End Function

        <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
        Function GetModuleHandle(ByVal moduleName As String) As IntPtr
        End Function

        <DllImport("kernel32", CharSet:=CharSet.Auto, SetLastError:=True)> _
        Function GetProcAddress(ByVal hModule As IntPtr, _
                                <MarshalAs(UnmanagedType.LPStr)> _
                                ByVal procName As String) _
                                As IntPtr
        End Function

        <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
        Function IsWow64Process(ByVal hProcess As IntPtr, _
                                <Out()> ByRef wow64Process As Boolean) _
                                As <MarshalAs(UnmanagedType.Bool)> Boolean
        End Function
End Module

Hier müssen Sie lediglich die Methode Is64BitOperatingSystem aufrufen um zu erkennen, ob Sie in einem 64-Bit-System gelandet sind.

 


Eselsbrücke: Unterschied zwischen Lastenheft und Pflichtenheft

Es gibt wenige Begriffe in der Welt der Informatik, die so häufig verwechselt werden wie „Lastenheft“ und „Pflichtenheft„.  Besonders peinlich wird es dann, wenn der Gesprächspartner den Unterschied so gut kennt, das er einen darauf hinweist, das man da etwas verwechsele. Es gibt aber einen einfachen Weg, sich das zu merken.

Vorher will ich aber darauf eingehen, was denn diese beiden Hefte überhaupt für Funktionen haben. Beide beschreiben etwas, nämlich wie das Produkt, die Anwendung, das Programm, später aussehen soll.

Nehmen Sie ein Minitextprogramm, das Textdateien erstellen, bearbeiten und, praktischerweise, speichern kann.

Das „Lastenheft“ könnte dann so aussehen:

„Es ist eine Anwendung zu erstellen, die eine Datei mit der Endung .TXT öffnen oder neu erstellen kann. Diese Datei wird dann in die Anwendung geladen und in einem Fenster angezeigt. Das Fenster soll die Bearbeitungsmöglichkeiten für den Text bieten, wie das Editieren, Löschen von Textpassagen oder hinzufügen von Text an beliebiger Stelle.

Der Text soll als Datei in einem frei auswählbaren Verzeichnis gespeichert werden. Ist eine Datei mit diesem Namen in dem gewählten Verzeichnis schon vorhanden, soll eine Frage erscheinen, auf der der Benutzer der Anwendung das Überschreiben der Datei zulassen kann.

Nebenbedingungen sind: Lauffähig unter Windows XP und Windows 7;  Mausbedienung“

OK, zugegeben, jeder weiß jetzt sofort, was der Kunde will, auch wenn das Lastenheft unvollständig ist.

Und das Pflichtenheft? Das könnte so aussehen:

„Es wird eine Windowsanwendung erstellt, die über eine Setupanwendung zu installieren ist und die folgenden Funktionen beinhaltet:
Öffnen einer Datei mit der Endung .TXT aus einem frei wählbaren Verzeichnis mittels einer Dialogform
Bearbeiten des Textes (Löschen, Hinzufügen, Überschreiben) in einem Formular , dabei kann der User zwischen „Überschreib-“ und „Einfügemodus“ umstellen.
 Speichern des Textes als TXT-Datei unter anderem oder neuem Dateinamen oder mit Überschreiben bestehender Datei
Menüführungspunkte sind dabei „Datei“ –> „Neu“, „Öffnen“, „Speichern“, „Speichern unter“….“

Das könnte noch ein wenig so weitergehen, aber Sie erkennen den Unterschied?

Das Lastenheft beschreibt das PROBLEM aus Sicht des KUNDEN, während das Pflichtenheft die LÖSUNG aus Sicht der ENTWICKLERS beschreibt.

Wie kann ich mir das aber am besten merken?

Esel trägt die Last, es ist seine Pflicht

Eselsbrücke: Der Esel trägt die Last vom Kunden, es ist ja seine Pflicht

Der Esel ist die Lösung dazu! Stellen Sie sich einen Esel vor, den Sie mit wertvollen Gütern bepacken. Sie geben dem Packesel eine Last mit (das Lastenheft), der Esel sieht es wiederum als seine Pflicht (Pflichtenheft) an, diese Aufgabe zu erfüllen. Die Rolle des Packesels übernimmt dabei der Entwickler!
Oh nein, jetzt will ich nicht die Entwickler (und damit mich selbst) als Packesel titulieren. Ganz und gar nicht. Aber mir hat diese Art der bildlichen Vorstellung bisher immer geholfen, in Diskussionen die Begriffe zuzuordnen. Eine richtige „Eselsbrücke“ eben!

%d Bloggern gefällt das: