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

0 Kommentare:

Kommentar veröffentlichen

Links zu diesem Post:

Link erstellen

<< Startseite