2.13.2010

Teure Typkonvertierung

Wichtiger Nachtrag siehe unten.

Ich habe den heutigen Vormittag dazu genutzt mich mit den Labs des neuen Visual Studio 2010 Training Kits zu beschäftigen. In einem der Labs ist mir ein ValueConverter für eine WPF-Anwendung aufgefallen. Dabei soll ein übergebener String-Value in einen Boolean konvertiert werden und umgekehrt.

Hier der Code für die Methode IValueConverter.Convert:
IValueConverter 
Da die Schnittstelle IValueConverter die Signatur und auch die Parameter für die Methode IValueConverter.Convert vorgibt, ist der Typ für den Parameter value vorgegeben. Für das oben gezeigte Beispiel ist die Verwendung eines try-catch Blocks bei der expliziten Konvertierung eines String zu einem Boolean recht teuer. Nebenbei bemerkt steht auch in den MSDN der wichtige Hinweis zur Verwendung eines catch-Blocks in C#:

Obwohl die catch-Klausel ohne Argumente verwendet wird, sodass sie jeden Ausnahmetyp abfängt, wird dies nicht empfohlen. Im Allgemeinen sollten Sie nur jene Ausnahmen abfangen, die Sie wiederherstellen können. Deshalb sollten Sie immer ein von
System.Exception abgeleitetes Objektargument angeben.

Kommen wir aber zurück zum Stichwort “teuer”. Immer dann wenn eine explizite Konvertierung zu einem Fehler führt, wird von der Runtime eine Exception ausgelöst.

Das kostet Zeit!

Ich habe mir darum ein kleines Sample ausgedacht in dem ich erstens eine Verbesserung der vorliegenden Konvertierung implementiere und gleichzeitig im Vergleich zu der der Implementierung aus dem C# Lab, einen Zeitmessung einbaue.

Hier der Code den ich als Verbesserungsvorschlag für die Implementierung aus dem C# Lab erstellt habe
CheckIsObjectBooleanI
Hier eine kurze Erläuterung zum Aufbau meiner Konvertierungsversion. Als erstes schaue ich ob der Parameter null ist. Wenn dem so ist verlasse ich mit return false sofort wieder die Methode. Dadurch erspare ich mir den Weg über einen else-Zweig. Danach wird eine implizite Konvertierung von Objekt nach String vorgenommen. Das hat den Vorteil, sollte value nicht vom Typ System.String sein, dass keine Exception ausgelöst wird. Sollte value nicht vom Typ System.String sein, wäre nun temp null. Darum überprüfe ich mit einer if Anweisung temp auf null. Sollte temp wirklich null sein, verlasse ich die Methode sofort wieder mit return false. Nun wird der Inhalt von temp mit der Methode ToLower() in Kleinbuchstaben umgewandelt. Das ist notwendig da ich sonnst auf “true”, “True”, “false”, “False” etc. abfragen müsste. Besonders wichtig ist zu beachten, dass ich die Methode ToLower() vor der entsprechenden if-Anweisung aufrufe. Folgende Variante würde sicher keinen Fehler hervorrufen, jedoch einen unnötigen Aufruf der Methode ToLower() bedeuten.

So nicht:

if(temp.ToLower() == "true" || temp.ToLower() == "false")

Sollte die if-Anweisung true zurückgeben, wird temp mit der statischen Methode ToBoolean() aus der Klasse Convert in einen Boolean konvertiert und der Rückgabewert wird mit return zurückgegeben. Andernfalls wird die Methode mit return false wieder verlassen.

Ähnlich wie bei der Verwendung von Linq, halte ich mich bei der Überprüfung von Methodenparametern an die Regel “markieren, filtern und selektieren”. Soll heißen das ich mit jeder Überprüfung, Konvertierung oder Selektion von Parametern in einer Methode immer den kürzesten Weg aus der Methode heraus wähle.

Gibt es nun wirklich einen Zeitunterschied zwischen beiden Varianten? Ja! in meinem Beispiel habe ich die Konvertierung aus dem C# Sample von Microsoft wie folgt implementiert:
CheckIsObjectBooleanII
Damit die Zeitmessung nicht nur ein Zeitergebnis zurückliefert, verwende ich eine foreach-Schleife mit 20 Durchläufen. Damit der catch Block aufgerufen wird, übergeben ich einen Integer als Wert. Der Code für die Zeitmessung meiner Konvertierung schaut dann wie folgt aus:

Main

Für die Zeitmessung der im Lab verwendeten Konvertierung wir der gleiche Code verwendet nur rufe ich dann die Methode CheckIsObjectBooleanII() auf. Das Ergebnis ist eindeutig.

Meine Konvertierung:
01
Die Konvertierung aus dem C# Lab:
02

Wie man an diesem einfachen Beispiel sehen kann, lohnt sich ein Refactoring von bestehendem Code mit den entsprechenden .NET-Mechanismen auf jeden Fall. Auch wenn es Code aus dem Hause Microsoft ist ;-) Wenn Ihr noch Vorschläge zur Verbesserung meiner Konvertierung habt, würde ich mich über ein Feedback per Mail sehr freuen.

Wichtiger Nachtrag:

Neben dem im Kommentar stehenden, sehr gutem, Hinweis von Albert Weinert, hat mich Albert auch noch auf die statische Methode TryParse() der Struktur Boolean hingewiesen. Diese Methode hat den großen Vorteil auch mit Whitespaces klar zu kommen. Dadurch wird die Methode sehr viel Fehlertoleranter.

Darum hier noch die dritte Variante der Methode CheckIsObjectBoolean().

CheckIsObjectBooleanIII 
Bei der Zeitmessung ergibt sich die gleiche Geschwindigkeit wie in meinem ersten Vorschlag aus der Methode CheckIsObjectBooleanI().

Vielen Dank Albert für diesen super Hinweis! Man lernt eben nie aus ;-)

TOM_MUE

Labels: ,

11.16.2009

.NET 4 Beta 2 auf Windows 7 unter Boot Camp 3 (Snow Leopard) installieren. Install .NET 4 Beta 2 on Windows 7 combined with Boot Camp 3 (Snow Leopard)

Wer so wie ich Windows 7 in Boot Camp nutzt, der wird bei der Installation von Visual Studio 2010 Beta 2 sicher ebenfalls auf eine Exception gestoßen sein, sobald die Installationsroutine versucht das .NET Framework 4 Beta 2 zu installieren.

Entwarnung: Es handelt sich um einen Bug und nicht um Hürde durch Boot Camp oder Snow Leopard :-) Zusätzlich ist auf den Connect-Seiten von Microsoft bekannt gegeben worden das dieser Fehler für die RTM-Installation von .NET 4 behoben ist. Nachlesen kann man dies hier: .NET 4 will not install in some Boot Camp/Snow Leopard scenarios.

Der Workaround über das BIOS die MAC-Partition abzuklemmen oder die Größe der MAC-Partition zu verringern erweist sich als nicht praktisch und umständlich!

Warum: Aber vielleicht noch einmal in deutsch kurz warum der Fehler überhaupt auftritt. Das Setup von .NET 4 Beta2 erkennt immer die Partition (aller vorhandenen Partitionen) die den meisten freien Speicherplatz besitzt. Genau auf dieser versucht das Setup dann temporäre Installationsdateien abzulegen. Da aber ein Windows-System auf einer MAC-Partition von Haus aus keine Schreibrechte hat, bricht das Setup mit einer Exception ab.

Lösungsvorschlag: Wenn das Setup versucht auf eine MAC-Partition zu schreiben, weil diese Partition den meisten freien Speicherplatz besitz, dann müssen wir Windows durch einen Treiber zum Schreiben auf eine solche MAC-Partition befähigen. Dazu kann man sehr einfach auf eine kosten- und anmeldefreie Testversion von MacDrive 8 der Firma Mediafour zurückgreifen. Ist der Treiber installiert und das System wurde neu gestartet, lässt sich auch VS2010 Beta2 und zuvor natürlich das .NET Framework 4 Beta 2 installieren.

HTH
TOM_MUE

Labels: , ,

11.13.2009

VS2008 mit TFS 2010 verbinden. Connect VS2008 with TFS 2010.

… in Vorbereitung auf meinen Vortrag bei der dodned UG Franken zum Thema WPF mit MVVM, habe ich mir heute auf meinem TFS 2010 einen kleinen Entwicklungsbereich geschaffen in dem ich meine VS2008-Projekte ablegen werde. Leider stellte sich das Verbinden des VS2008 Team Explorers mit meinem TFS 2010 als nicht ganz so einfach heraus. Um den Team Explorer für VS2008 mit dem TFS 2010 Beta 2 zu verbinden, muss man den vollen Pfad des TFS angeben. Das könnte wie in dem folgenden Beispiel aussehen

http://TFS2010:8080/tfs

Damit dieser Pfad im Team Explorer von Visual Studio 2008 akzeptiert wird, muss man aber erst das SP1 für Visual Studio 2008 und den SP1 Patch KB974558 installieren. Hier die passenden Links zu den Downloads.

Visual Studio 2008 SP1

SP1 Patch KB974558

Gerade jetzt wo es die erste sehr stabile Version des TFS 2010 Basic für alle umsteigewilligen Visual Source Safe 2005 Benutzer gibt, lohnt sich die Installation des VS2008 Team Explorers wenn man weiterhin noch mit VS2008 arbeiten will/muss. Wer bisher noch keinen Team Explorer in Visual Studio 2008 verwendet der kann diesen >Hier< downloaden. Die Beta 2 des TFS 2010 gibt es >Hier< kostenlos zum herunterladen. Wer schon mit Visual Studio 2010 Beta 2 arbeitet, der kann den Team Explorer 2010 Beta 2 >Hier< herunterladen.

HTH

TOM_MUE

Labels: , ,

10.15.2009

Kein Designer in Expression Blend 3. No designer in Expression Blend 3.

Erstellt man mit Visual Studio ein Projekt vom Typ “Class Library”, fügt diesem dann eine XAML-Datei in Form von einem UserControl, einem Window oder einer Page hinzu, zeigt Expression Blend ab der Version 3.0 keinen Designer-Workspace mehr für diesen Projekttyp an. Das ist natürlich eine blöde Situation. Besonders dann, wenn man auf das MVVM-Pattern setzt und eben nicht nur in EXE-Assemblies WPF-Oberflächen hat.

Step01

Step02


(In Visual Studio wird der Designer Cider für WPF-Window-Elemente auch in einem Class Library Projekt angezeigt)

Step03
(In Expression Blend fehlt der Designer-Workspace)

Da ich mich durch mein Buchprojekt vom letzten Jahr intensiv mit dem Aufbau von Projekten in Visual Studio und dem Aufbau von Projektdateien beschäftigt hatte, dämmerte mir ziemlich schnell woran das Dilemma liegen könnte. Expression Blend scheint seit der Version 3 die Anzeige des Designer Workspace nicht mehr nur über die Art der geöffneten Datei zu bestimmen. Schon mit dem Laden eines Projekts, scheint Expression Blend 3 festzulegen, ob für die Dateien in dem Projekt ein Designer angezeigt werden kann oder nicht. Neben den Informationen zu den Referenzierten Assemblies, werden in den Projektdateien auch die Informationen zu dem entsprechenden Projekttypt hinterlegt. Erstellt man aber ein Class Library Projekt, kann mit dem erstellen dieses Projekt Visual Studio noch nicht wissen das man später eventuell WPF-Dateien hinzufügen möchte. Darum fehlen in der Projektdatei dieses Projekttyps die Eintragungen für die verwendete Sprache und für ein WPF-Projekt. Dies lässt sich aber sehr einfach nachholen. Dazu öffnet man das Projekt mit Visual Studio und ruft aus dem Kontextmenu des Projektdatei im Solution Explorer den Befehl “Unload Project” auf. Danach wird die Projektdatei ausgegraut im Solution Explorer von Visual Studio angezeigt.

Step04

Ist das Projekt entladen, kann der Befehl “Edit…” über das Kontextmenu des Projekts im Solution Explorer aufgerufen werden. In der geöffneten Projektdatei werden nun die entsprechenden Einträge für ein WPF Projekt, das mit der Programmiersprache C# erstellt wird, eingetragen. Das fügt man im Tag <PropertyGroup> das Sub-Tag <ProjectTypeGuids> mit den folgenden beiden GUIDS ein:

- {60DC8134-EBA5-43B8-BCC9-BB4BC16C2548} –> steht für ein WPF-Projekt

- {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} –> steht für Windows C#

Der fertige Eintrag schaut dann so aus:

<ProjectTypeGuids>{60DC8134-EBA5-43B8-BCC9-BB4BC16C2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Step05

Jetzt speichert man die Änderungen in der Projektdatei ab und öffnet das Projekt einfach wieder mit Expression Blend oder Visual Studio. In Expression Blend 3 wird nun auch wieder für eine WPF-Datei des Designer-Workspace angezeigt.

Step06

HTH

TOM_MUE

Labels: , ,

8.23.2009

Uninstall Visual Studio 2010 Beta 1 HowTo

Servus,

wer für die Installation einer VS2010 LCTP oder der hoffentlich bald erscheinenden Beta2 von VS2010 die bereits installierte Beta1 von seinem System entfernen möchte, der sollte sich mal den Blogeintrag von Scott Hanselman ansehen. Hier ist der Link Klick mich!

Zwar ist der Beweggrund für Scott ein anderer gewesen, aber das spielt keine Rolle :-) Bei mir hat es wunderbar funktioniert.

HTH TOM_MUE

Labels: ,

8.05.2009

Absturz von Visual Studio 2010 bei verlorener TFS-Verbindung vermeiden

In meinem virtuellen Entwicklungs-Environment habe ich Windows 7 RC als Betriebsystem installiert und verwende mit der BETA1 von Visual Studio 2010 für die Projektverwaltung eine Verbindung zu einem TFS 2008. Die Verbindung zu diesem TFS wird über eine sichere VPN-Verbindung hergestellt. Wenn ich VS2010 mit geöffneten Teamexplorer, dem geöffneten Toolfenster für die Source Code-Verwaltung und dem geöffneten Toolfenster für die Pending Changes beende, hatte ich nach einem Neustart immer wieder mit einem sehr instabilen Zustand bei VS2010 zu kämpfen. War mit dem nächsten Start von Visual Studio die VPN-Verbindung zum TFS nicht aufgebaut, brachte Visual Studio eine Fehlermeldung, war danach aber auch nicht mehr wirklich zu gebrauchen. Schließt man hingegen vor dem Beenden von VS2010 Beta1 die drei Toolfenster, tritt der Fehler beim nächsten Start nicht mehr auf. Nun kann man sicher immer wieder von Hand die drei oben genannten Toolfenster schließen. Das ist aber auf Dauer keine vernünftige Lösung. Damit das ganze etwas leichter und schneller von der Hand geht habe ich mir im ersten Schritt ein Makro geschrieben.

Public Sub CloseWindows()

'Pending Changes - Source Files

DTE.Windows.Item("{2456BD12-ECF7-4988-A4A6-67D49173F564}").Close()

'Team Explorer
DTE.Windows.Item("{131369F2-062D-44A2-8671-91FF31EFB4F4}").Close()

'Source Control Explorer
DTE.Windows.Item("{99B8FA2F-AB90-4F57-9C32-949F146F1914}").Close()

End Sub

Makros machen den Zugriff auf diese Funktionen von Visual Studio sehr einfach. Dennoch sind ein paar Kleinigkeiten gerade im Umgang mit Toolfenstern für Makros zu beachten. Das Automatisierungsobjektmodell für Visual Studio bietet verschiedene Möglichkeiten auf die Toolfenster der Visual Studio IDE zuzugreifen. Über einen Indexwert, den Namen des Toolfensters oder über die GUID eines Toolfensters. Zu empfehlen ist aber nur der Zugriff auf ein Toolfenster über dessen GUID. Die GUID eines Toolfensters ist die Einzig eindeutige Identifizierungsmöglichkeit innerhalb des Visual Studio Automatisierungsobjektmodells. Die jeweilige GUID eines Toolfensters in Visual Studio, lässt sich sehr einfach über die Windows –Registrierung (Registry) ermitteln. Dazu öffnen Sie einfach über ausführen (run) mit dem Befehl regedit den Registrierungs-Editor von Windows (Achtung: ab hier sind administrative Rechte nötig). Unter dem Pfad HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\<VS-Version\ToolWindows finden Sie alle GUIDS, die für die in Visual Studio verwendeten Toolfenster registriert wurden. Die GUIDS haben sich auch nicht von einer Visual Studio Version zur nächsten geändert. Zum Beispiel gilt die GUID für den Solution-Explorer in VS-2008 genau so wie in VS2010.

Wenn Sie das Makro über die Makro-IDE erstellt und abgespeichert haben, können Sie dies leicht aus der Visual Studio IDE heraus aufrufen. Dazu wechseln Sie zum Beispiel den Eingabefokus in das Feld Suchen auf der Symbolleiste Standard. Dort beginnen Sie den Aufruf Ihres Makros mit einer spitzen Klammer die nach Rechts zeigt >. Wenn Sie dann beginnen Macros einzutippen, öffnet das Feld Suchen automatisch eine Liste mit allen Namen der Makros, die auf Ihrem Environment für Visual Studio bekannt sind. Achtung! Verwenden Sie eine deutsche Version von Visual Studio müssen Sie Makros eintippen. Verwenden Sie eine englische Version beginnt der Aufruf von Makros immer mit Macros. Damit Sie nicht immer den vollständigen Namen des Makros eintippen müssen, können Sie auch einen Alias angeben. Dazu wechseln Sie wieder in das Feld Suchen auf der Symbolleiste Standard und tippen den folgenden Befehl ein >alias ‚vollständiger Name des Makro’ CloseToolWindows. Mein Makro hat den Namen Macros.MyMacros.VSWindowsMacro.CloseToolWindows. Somit muss der Aufruf mit dem Befehl alias wie folgt aussehen: >aias Macros.MyMacros.VSWindowsMacro.CloseToolWindows CloseToolWindows. Ab jetzt ist der Aufruf des Makros mit dem Alias CloseToolWindows verbunden. Dem Alias können Sie auch einen anderen Namen geben. So wäre closetw ebenfalls möglich. Der Name für den Alias darf aber nicht schon für einen anderen Aufruf von Befehlen in Visual Studio vergeben sein. Nun kann ich mit einem kurzen Aufruf meines Alias/Makros drei Toolfenster auf einmal schließen und umgehe so die zu Begin geschilderten Problemen. Natürlich können Sie sich nun auch ein Makro erstellen, über das Sie sehr einfach die drei Toolfenster wieder öffnen können. Der Makro Code dazu schaut dann wie folgt aus:

Public Sub ShowWindows()

'Team Explorer

DTE.ExecuteCommand("View.TeamExplorer")

'Source Control Explorer

DTE.ExecuteCommand("View.TfsSourceControlExplorer")

'Pending Changes - Source Files

DTE.ExecuteCommand("View.TfsPendingChanges")

End Sub

Wenn Sie mehr zum Automatisierungsobjektmodel für Visual Studio wissen möchten, wie man über dieses Beispiel hinaus mit den Fenstern von Visual Studio arbeiten kann oder eigene Toolfenster in der IDE integriert, dann möchte ich Sie auf mein Buch aufmerksam machen. Das Buch trägt den Titel “Add-in-Entwicklung für Visual Studio” und ist neben anderen Onlineanbietern auch bei Amazon erhältlich. Natürlich können Sie dieses Buch auch in der Buchhandlung Ihres Vertrauens erwerben :-) Das Beste an diesem Buch ist, das es auch für Visual Studio 2010 und dem darin enthaltenen Automatisierungsobjektmodell, nach dem aktuellen Stand seine komplette Gültigkeit behält.

HTH
TOM_MUE

Labels: , ,

7.16.2009

Breakpoint-Leiste im VS2010-Editor ist verschwunden. Was nun?

… warum genau, konnte ich leider noch nicht herausfinden. Aber aus irgend einem Grund verliert Visual Studio 2010 ab und zu einmal seine Breakpoint-Leiste. OK, VS2010 ist noch in der BETA1-Phase und darf auch noch ein bisschen rumzicken ;-) Für alle, die sich jetzt fragen welche Breakpoint-Leiste ich meine, ist diese in der nachfolgenden Abbildung durch die beiden roten Pfeile gekennzeichnet.

DebugLine

Auch wenn die Breakpoint-Leiste nicht mehr vorhanden ist, kann man zum Beispiel mit F9 an einer gewünschten Codezeile im Code Editor von Visual Studio einen Breakpoint einfügen. Es ist aber sehr viel schwerer/umständlicher ohne Breakpoint-Leiste im Code Editor von Visual Studio eine Bedingung oder eine Hit-Condition für einen Breakpoint anzugeben. Eine Möglichkeit einen Breakpoint anzupassen hat man mit dem Breakpoints-Fenster. Das Breakpoints-Fenster kann bei der Standardeinstellung für das Tastaturlayout von Visual Studio mit Ctrl + Alt + B aufgerufen werden. Wenn diese Tastenkombination nicht funktioniert kann das Breakpoints-Fenster in Visual Studio über das Menü Debug | Windows | Breakpoints ebenfalls aufgerufen werden. Innerhalb des Breakpoints-Fenster kann dann auf dem entsprechenden Breakpoint das Kontextmenü aufgerufen werden. Dazu klickt man mit der rechten Maustaste auf das Symbol (den roten Punkt) des Breakpoints. Über dieses Kontextmenü kann dann eine Hit-Condition, einen Filter oder eine andere Bedingung für den Breakpoint festlegt werden.

BreakpointsKontext

Damit man aber in Visual Studio 2010 die Breakpoint-Leiste wieder zum Vorschein bringt, muss man zu erst alle Instanzen von Visual Studio schließen. Dann öffnet man über Start | Alle Programme | Microsoft Visual Studio 2010 | Visual Studio Tools den Microsoft Visual Studio 2010 Command Prompt. Über diesen Command Prompt ruft man Visual Studio 2010 mit dem Parameter /ResetSettings auf.

VS2010CommandPrompt

Danach startet Visual Studio mit seiner Ausgangskonfiguration und zeigt dazu vor dem erneuten Laden der Visual Studio IDE den folgenden Dialog an.

VS2010FirstStart

Danach sollte auch die Breakpoint-Leiste im Code-Editor von Visual Studio wieder sichtbar sein. Aber ACHTUNG! Alle Änderungen, benutzerdefinierten Einstellung etc. gehen durch den Aufruf von VS2010 mit /ResetSettings verloren. Leider!

HTH TOM_MUE

Labels: , ,

7.13.2009

Visual Studio 2010 Debugger-DataTips

Bei meiner Arbeit mit der BETA 1 von Visual Studio 2010 sind mir beim Debuggen einer C#-Anwendung die neuen DataTips aufgefallen.

VS2010_DataTip

DataTips kann man sich als kleine Schnellinfos für Code-Variablen mit Notizzettelfunktion vorstellen. Zwar kann man, bis auf die Notizzettelfunktion, auch schon in früheren Visual Studio Versionen Code-Variablen entweder dem Watch- oder dem Quick-Watch-Fenster hinzufügen, dies gestaltet sich aber nicht so komfortabel wie mit den neuen DataTips.

Hier ein kleines Beispiel:

        [STAThread]
static void Main(string[] args)
{
Window wpfWindow = new Window();

wpfWindow.Title = "TOM_MUE Main Page";

wpfWindow.Height = 300;

wpfWindow.Width = 300;

wpfWindow.Left = SystemParameters.WorkArea.Width - wpfWindow.Width;

wpfWindow.Top = SystemParameters.WorkArea.Height - wpfWindow.Height;

Application app = new Application();

app.Run(wpfWindow);
}


Ich habe in der Methode Main aus meinem kleinen WPF-Sample eine lokale Variable mit dem Namen wpfWindow definiert. Diese Variable ist vom Typ System.Windows.Window und hält somit eine Eigenschaft für die Höhe des WPF-Fensters bereit. Diese Eigenschaft hat den Namen Height. Möchte man nun den Wert dieser Eigenschaft während des Debuggens im Watch-Fenster von Visual Studio beobachten, muss man in der Spalte Name des Watch-Fensters wpfWindow.Height eingeben und das Toolfenster verankern um den Value (den Wert) beobachten zu können. Gibt man nur Height ein, kann das Watch-Fenster nicht wissen um wessen Eigenschaft es sich handelt und gibt eine Exception aus.



VS2010_Watch1



Einfacher und auch, nach meiner Meinung, übersichtlicher, lassen sich für diese Aufgabe die neuen DataTips verwenden. Wenn man den Wert der Eigenschaft Height beobachten möchte, braucht man in VS2010 im Debugger-Mode nicht Anderes zu tun, als mit der Maus über die entsprechende Variable zu zeigen und dann auf das DataTips-Symbol zu klicken.



VS2010_DataTipSymbol



Nun öffnet sich der DataTip und kann frei schwebend im Codefenster bewegt werden. DataTips sind nur im Debugger-Modus von VS2010 sichtbar, bleiben aber auch nach dem Ende einer Debug Session erhalten. Starten Sie also den Debugger erneut, wird der DataTip von VS2010 wieder angezeigt.



VS2010_DataTipDebugView



Eigene Notizen lassen sich dem DataTip sehr einfach hinzufügen. Dazu klicken Sie einfach mit der Maus auf das Expander-Symbol und tippen dann Ihre Notiz ein. Fertig :-)



VS2010_DataTipWithNotiz



HTH TOM_MUE

Labels: ,

7.08.2009

Visual Studio 2008 No template information found

Bei meiner Arbeit mit Visual Studio 2010 BETA1, bin ich gestern über einen möglichen Seiteneffekt gestoßen, der mit der Side by Side Installation von Visual Studio 2008 und Visual Studio 2010 zu tun haben könnte.

Ausgangssituation:

In meiner virtuellen Maschine hatte ich bereits Visual Studio 2008 Team Suite inklusive SP1 installiert. Zusätzlich hatte ich nun Visual Studio 2010 BETA1 installiert. Die Installation und die Arbeit mit VS2010 verliefen ohne nennenswerte Probleme. Als ich dann aber VS2008 startete und versuchte ein neues C#-Projekt zu erstellen, bekam ich die folgende Fehlermeldung von VS2008 angezeigt.

“No template information found”

Message

Na toll, dachte ich mir. Jetzt muss ich entweder VS2008 neu installieren oder muss eine separate VM mit VS2010 aufsetzen. Mit dem Klick auf die Schaltfläche OK zeigte sich dann ein sehr leerer Projektvorlagen-Dialog in Visual Studio 2008.

emtyProjectTemplatesDialog

Aber glücklicherweise konnte ich mich im Zusammenhang mit dieser Fehlermeldung an den Parameter /installvstemplates erinnern. Diesen Befehl kann als Parameter über die Konsole für den Start von Visual Studio verwenden. Und genau so stand es dann auch in der Message im Windows-Eventlog, die Visual Studio 2008 dort eingetragen hatte (siehe Text in der MessageBox).

Lösung/Vorgehen:

In Windows öffnet man den Visual Studio 2008 Command Prompt. Dazu einfach über Start | Alle Programme | Microsoft Visual Studio 2008 | Visual Studio Tools | Visual Studio 2008 Command Prompt anklicken.

VS2008CommandPrompt

Jetzt tippt man einfach devenv.exe /installvstemplates ein und bestätigt dann mit Return (Enter).

Nun sind auch alle Projekt-Templates in Visual Studio wieder enthalten.

ProjectTemplatesDialog Wichtig:

Wenn man wie oben beschrieben devenv.exe /installvstemplates über den Visual Studio 2008 Command Prompt aufruft, wird die DIE von Visual Studio nicht aufgerufen/angezeigt. Also keine Panik :-) Einfach Visual Studio danach normal starten.

Fazit:

Es hat sich einmal mehr bewiesen, dass ein gutes Grundwissen zu den möglichen Parametern für Visual Studio von großem Vorteil sein kann. Außerdem, und das ist sicher das wichtigere Fazit, sollte unbedingt bei der Verwendung von Visual Studio 2010 darauf geachtet werden, dass kein Produktivsystem als Plattform verwendet wird.

 

 

Gruß

TOM_MUE

Labels: , ,

7.02.2009

Visual Studio Team Explorer Beta 1 mit CodePlex-TFS verbinden

Nach dem mein Kollege und ich uns heute ein neues Projekt bei CodePlex erstellt hatten, war ich schon sehr gespannt ob und wie die Verbindung aus meinem Visual Studio 2010 B1 zum CodePlex TFS funktioniert. Die Anleitung auf CodePlex ist auf jeden Fall leicht und auch für Ungeübte schnell zu verstehen. Beim Verbinden mit dem TFS gibt es auch nicht wirklich viel, was man/Frau falsch machen koennte :-)

Leider bekam ich aber mit dem ersten Versuch sich auf den CodePlex-TFS zu verbinden die folgende Fehlermeldung:

The ServicePointManager does not support proxies with the https scheme.

ErrorConnectToCPTFS

Oha, was nun? OK, ich begab mich dann mit Hilfe der Suchmaschine meiner Wahl auf die Suche nach einer Lösung. Und siehe da, das Problem ist bekannt. Es gibt einen Bug in der BETA1 von VS2010 der aber mit der BETA2 (wann auch immer diese erscheinen mag) behoben sein soll. Martin Hinselwood hat auf seinem Blog eine Beschreibung veröffentlicht, wie man sich trotz des Bugs in VS2010 Beta1 mit dem TFS von CodePlex verbinden kann. Ich möchte hier eine deutsche Anleitung veröffentlichen.

  1. Sollte VS2010 noch geöffnet sein, muss es auf jeden Fall beendet werden.
  2. Für eine Verbindung zum CodePlex-TFS ist ein https-Verbindung notwendig. Damit dies mit VS2010 Beta1 funktioniert, müssen in der Windows-Registrierung zwei neue Schlüssel mit entsprechenden String Values eingefügt werden. Dazu öffnet man das Programm Registry Editor –> dazu Run (Ausführen) öffnen (Windows-Taste + R) und regedit eintippen. Dann OK klicken.

    Run
  3. In der Windows-Registrierung trägt man den Schlüssel RequestSettings einmal für den TFS und einmal für VS2010 ein. Die vollständigen Pfade in der Windows-Registrierung müssen dann unter einem 32Bit-System wie folgt aussehen

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TeamFoundationServer\10.0\RequestSettings

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\TeamFoundation\RequestSetting

    Und auf einem 64Bit-System sehen die vollständigen Pfade dann so aus:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\TeamFoundationServer\10.0\RequestSettings

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\TeamFoundation\RequestSettings

    TFS_Key VS2010_Key
  4. Nun trägt man in den beiden neuen Schlüsseln den String Value BypassProxyOnLocal mit dem Value False ein.

    StringValue
  5. Nun kann man VS2010 neu starten und über den Team-Explorer die Verbindung zum CodePlex-TFS aufbauen.

    AddTFS ConnectToProject  TeamExplorer


Wunderbar! Es funktioniert also doch. Hab ich ja gewusst :-) Also dann, ich wünsche allen Lesern meines Blogs gutes Gelingen bei Ihren Projekten mit VS2010. Wenn noch Fragen zu diesem Thema offen sind, dann einfach eine Mail an mich.

TOM_MUE

Labels: , ,