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.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: , ,