Visual Studio 2010 kurz getestet

Nun hat die Neugier doch gesiegt und ich habe auf meinem Entwicklungsrechner Visual Studio 2010 installiert. Man kann sich ja nur mit ein paar gesammelten Erfahrungen für oder gegen eine Sache entscheiden.

Bei der Installation gab es nichts zu bemängeln, alles lief sauber durch. Auch die AddIns Visual Assist und Tabs Studio waren schnell eingerichtet. Auf Tabs Studio bin ich über einen Pingback zum EasyTabs-Beitrag gestoßen. Tabs Studio bietet die wichtigsten Funktionen von EasyTabs. Etwas nachteilig ist lediglich, dass die Leiste nicht auch unten angeordnet werden kann. Aber daran könnte man sich sicher gewöhnen.

Große Ernüchterung brachte der Aufruf der Online-Hilfe, zu der Martin schon einen treffenden Beitrag geschrieben hat. Keine Ahnung, was Microsoft sich da wieder mal gedacht hat, wenn überhaupt. Alles läuft im Browser ab und somit natürlich auch außerhalb der IDE. Vermutlich verwenden bei Microsoft alle Entwickler mehrere Bildschirme und müssen nie in der Hilfe suchen.

Bei der Anpassung von Menüs und Symbolleisten geht Microsoft neue innovative Wege. Symbolleisten können per Maus nur noch an der jeweiligen Andockposition hin- und hergeschoben werden. Das Wechseln der Positionen (z.B. vom oberen Fensterrand an den unteren) ist nur noch per Dialog möglich. Aber auch das Hinzufügen, Entfernen oder Verschieben von Symbolen oder Menüeinträgen funktioniert nur noch über ein Dialogfenster. Die Maus ist immerhin noch dafür da, die entsprechenden Schaltflächen im Dialog anzuklicken. Ich bin gespannt, ob sich dieses neue Bedienkonzept auch in anderen Anwendungen durchsetzt.

Über die Darstellungsqualität des Texteditors kann ich mich nicht beklagen. Alles wird sauber dargestellt, auch ohne die ClearType-Einstellungen anpassen zu müssen. Erheblich verschlechtert hat sich aber leider wieder einmal die Makro-Performance. Ich habe mir schon zu VC6-Zeiten ein paar Makros geschrieben, die auf Knopfdruck diverse Kommentarblöcke in Quelltextdateien einfügen. Im VC6-Editor waren die Blöcke quasi schon eingefügt, wenn man das jeweilige Tastenkürzel losgelassen hat. Der Editor von Visual Studio 2008 brauchte für die gleiche Aktion schon etwas über zwei Sekunden, was aber von Visual Studio 2010 mit über sechs Sekunden locker übertroffen wird.

Aufgrund der fensterlosen WPF-Oberfläche ist das Scrollen eines inaktiven Fensters per Mausrad mit Hilfe von KatMouse nicht mehr möglich. Man muss immer erst in das Fenster klicken, welches man durchblättern möchte. Die Bearbeitung der globalen VC-Verzeichnisse für Header- oder Bibliotheksdateien im Einstellungsdialog wurde wegen der Umstellung auf das MSBuild-System abgeschafft, stattdessen muss man diese nun in den Eigenschaftsseiten eines Projekts bearbeiten. Dazu wählt man im Menü Ansicht den Eigenschaften-Manager und öffnet jeweils eine Win32- und x64-Konfiguration:

Über den Befehl Eigenschaften des Kontextmenüs öffnet man den Einstellungsdialog und kann nun die Verzeichnisse anpassen:

Die aktualisierten Eigenschaften-Dateien werden in den lokalen Eigenschaften des Benutzers (C:\Users\<Benutzername>\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props bzw. Microsoft.Cpp.x64.user.props) abgelegt.

Zu dieser offiziellen Methode gibt es noch eine Alternative, mit der man die VC-Verzeichnisse systemglobal für alle Anwender ändern kann. Dazu öffnet man die beiden Dateien C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsets\v100\Microsoft.Cpp.Win32.v100.props und C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets\v100\Microsoft.Cpp.x64.v100.props und editiert die Pfade direkt. SpeedEdit kann auch Dateien in UAC-geschützten Verzeichnissen bearbeiten, bei Verwendung eines anderen Editors muss man die Dateien vor der Änderung erst in ein UAC-freies Verzeichnis kopieren und anschließend wieder zurückspielen.

Eine Konstante beim Erscheinen einer neuen Visual Studio-Version ist die Umstellung auf neue Projekt- und Arbeitsbereichsdateien. Die Konvertierung geschieht automatisch beim Öffnen eines alten Projekts oder eines Arbeitsbereichs. Dabei kann es passieren, dass Meldungen mit der Kennung MSB8012 angezeigt werden:

MSB8012: $(TargetName) (‘CxArj’) does not match the Linker’s OutputFile property value ‘..\..\lib\CxArj61u.dll’ (‘CxArj61u’) in project configuration ‘Release|Win32′. This may cause your project to build incorrectly. To correct this, please make sure that $(TargetName) property value matches the value specified in %(Link.OutputFile).

MSB8012: $(TargetPath) (‘D:\Visual C++\Dev\Libraries\CxArchiver\CxArj\.\objs\Release\CxArj.dll’) does not match the Linker’s OutputFile property value ‘..\..\lib\CxArj61u.dll’ (‘D:\Visual C++\Dev\lib\CxArj61u.dll’) in project configuration ‘Release|Win32′. This may cause your project to build incorrectly. To correct this, please make sure that $(TargetPath) property value matches the value specified in %(Link.OutputFile).

Das passiert, wenn im Projekt eine Ausgabedatei festgelegt wird, die sich vom Projektnamen selbst unterscheidet oder der Ausgabepfad für die Datei nicht dem eingestellten Ausgabeverzeichnis für das Projekt entspricht. Ich vermute mal, dass dieses gar nicht mal so selten vorkommt, da Zieldateien in der Debugversion häufig durch ein abschließendes “d” bzw. bei Erstellung von Ansi-/Unicode-Projekten durch ein zusätzliches “u” für die Unicode-Variante gekennzeichnet werden. Bei mir ist es z.B. so, dass alle Dlls in einem gemeinsamen Zielverzeichnis erstellt werden. Da ich aber nicht möchte, dass sich in diesem Verzeichnis auch alle .exp- und .lib-Dateien dieser Dlls tummeln, unterscheidet sich das Ausgabeverzeichnis des Projekts vom Zielverzeichnis der Dlls.

Die gleichen Warnungen werden anschließend auch beim Erstellen des Projekts angezeigt. Zur Auflösung des Konflikts wird empfohlen, den Projektnamen in den allgemeinen Konfigurationseigenschaften anzupassen. In Visual Studio 2010 gibt es dafür ein neues Feld für die Anpassung von $(TargetName). Allerdings muss man diese Änderung dann auch für alle Projekte in allen Konfigurationen durchführen. Wer also 100 Projekte mit jeweils vier Konfigurationen hat (Release/Debug für Win32/x64), darf unter Umständen 400x mal den Zielnamen anpassen, wenn der Name der Ausgabedatei nicht dem Projektnamen entspricht.

Allerdings ist es mir nicht gelungen, die zweite Warnung zum $(TargetPath) abzustellen, ohne das Ausgabeverzeichnis dem Zielverzeichnis gleichzusetzen. Fans der Holzhammer-Methode öffnen einfach die Datei C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets und entfernen in Zeile 982 den Text DoLinkOutputFilesMatch. Nachteilig ist dabei aber, dass die Variable $(TargetPath) dann nicht mehr der tatsächlichen Ausgabedatei entspricht, sondern stattdessen auf das in den Projekteigenschaften definierte Ausgabeverzeichnis zeigt. Wichtig ist das bei selbstdefinierten Build-Ereignissen, die man entsprechend anpassen muss, wenn man die Zieldatei nicht im Ausgabeverzeichnis ablegen möchte.

Nach der Konvertierung eines Arbeitsbereichs kann dieser mit Visual Studio 2008 nicht mehr geöffnet werden, wenigstens wird eine Sicherungsdatei angelegt. Will man mit beiden Versionen weiterarbeiten, dann muss man Arbeitsbereiche und Projektdateien doppelt pflegen. Vorsicht aber beim Einchecken in den TFS, da alle alten Projektdateien nach der Konvertierung automatisch aus der Quellcodeverwaltung gelöscht werden.

Mir persönlich fällt es sehr schwer, wesentliche Gründe zu finden, die für einen Umstieg auf Visual Studio 2010 sprechen. .NET 4 brauche ich nicht, die Hilfe-Funktion ist praktisch nicht mehr vorhanden und der neue historische Debugger funktioniert sowieso nur mit .NET-Code. Das erheblich verbesserte IntelliSense bringt mir auch keine Vorteile, da Visual Assist hier schon seit Jahren um Klassen besser ist. Die für einen C++-Entwickler wichtigen Neuerungen (Compiler, C/C++-Laufzeit und MFC) lassen sich zudem sehr einfach in Visual Studio 2008 einbinden.

Fazit: Bis zum Erscheinen von Visual Studio 2012 geht es erst einmal mit Visual Studio 2008 R2 weiter.

Aktualisierung auf TFS 2010

Ich habe lange überlegt, ob ich den Team Foundation Server auf die neue Version aktualisiere. Aufgrund meines vorläufigen Verbleibs bei Visual Studio 2008 R2 ist das Upgrade eigentlich nicht notwendig. Allerdings versprühen die geringeren Softwareanforderungen einen gewissen Charme. Für die Installation von TFS 2008 war eine Windows-Serverversion notwendig, dazu kamen noch ein SQL-Server mit Berichts- und Analysefunktion sowie SharePoint. Das SP1 ließ sich nur einspielen, wenn der TFS-Server an einen Domänencontroller angemeldet war, allerdings durfte er selbst nicht auf einem solchen installiert werden. Ich musste also temporär einen Domänencontroller in einer VM installieren und vor dem SP1-Update den Server in die Domäne einklinken. Nach dem Update konnte die Verbindung wieder gelöst werden. Einfach sieht anders aus.

TFS 2010 ist hier deutlich anspruchsloser. Er lässt sich auch auf einem Client-Betriebssystem installieren und begnügt sich mit der Express-Variante vom SQL Server. Diese wird auf Wunsch auch während der Einrichtung des TFS installiert, einfacher geht es nicht. Zudem reizte mich auch eine Aktualisierung des Betriebssystems auf Windows 7 oder Windows Server 2008 R2, die eine bessere Zusammenarbeit mit Windows 7-Clients versprechen. TFS 2008 läuft bei mir noch auf einem Windows Server 2003 R2.

Die Festplatte meines Servers enthält bereits zwei primäre Partitionen mit jeweils 30 GB, einer testweisen Aktualisierung stand also nichts im Weg. Nach der Sicherung der aktuellen TFS-Datenbanken mit DBSave wurde auf der freien Partition Windows Server 2008 R2 eingespielt, anschließend folgte noch der gerade veröffentlichte SQL Server 2008 R2 sowie der TFS 2010. Nach der Rücksicherung der Datenbanken wurde TFS 2010 mit Hilfe der Team Foundation-Administratorkonsole über die Upgradefunktion eingerichtet:

Berichtsfunktion und SharePoint habe ich deaktiviert, da die beiden Sachen in den letzten zwei Jahren kaum bzw. gar nicht benötigt wurden. Wer mag, der kann im achten Schritt noch den vorgegebenen Namen für die Standardkollektion ändern, dies ist später nicht mehr möglich.

Auf dem letzten Screenshot ist zu sehen, dass bei der Installation auch gleich der Webzugriff eingerichtet wurde. Dafür musste im TFS 2008 noch eine zusätzliche Software eingespielt werden.

Anwender von Visual Studio 2008 müssen nun noch das Update für die Aufwärtskompatibilität von Visual Studio Team System 2008 Service Pack 1 mit Team Foundation Server 2010 installieren. Beim Verbinden mit einem TFS 2010-Server muss im Verbindungsdialog die vollständige Adresse http://server:8080/tfs angegeben werden.

Ein kleines Problem hatte ich mit dem alten Arbeitsbereich, der zwar übernommen aber in Visual Studio 2008 nicht erkannt wurde. Löschen und Neuanlegen schafften Abhilfe. An dieser Stelle noch der Hinweis, dass man zur Sicherheit vor der Aktualisierung möglichst alle Dateien einchecken sollte.

WS.Reputation.1

Seit der gestrigen Veröffentlichung von SpeedCommander 13.20 erhielt ich mehrere Anfragen von Anwendern, warum ihr Virenscanner das Installationsarchiv als Bedrohung ansieht und automatisch in Quarantäne verschiebt. Dabei wird folgender Screenshot angezeigt:

Es scheint so, als ob Symantec aus den Kriterien ‘Neu’ und ‘Wenig verbreitet’ eine abstrakte Bedrohung konstruiert, die dazu führt, dass die Datei sofort in Quarantäne verschoben wird. Die Hersteller von Antiviren-Software finden immer wieder neue Möglichkeiten, wie man Anwender verunsichern kann. Ganz abgesehen vom erhöhten Supportaufkommen, mit dem sich dann die kleinen Softwareanbieter herumärgern müssen.

SpeedCommander 13.20

SpeedCommander 13.20 wurde veröffentlicht und kann heruntergeladen werden. Die Liste mit den Änderungen findet ihr wie üblich im Anwenderforum.

Über zwei neue Funktionen hatte ich bereits berichtet. Mit der Einstellung

[FileOperation]
;Verschieben, wenn Quell- und Zielname identisch sind
;0 - Fehlermeldung
;1 - Datei wird umbenannt von 'dateiname.ext' nach 'dateiname [1].ext'
MoveOnSameName=0

kann das Verhalten beim Verschieben von Dateien im gleichen Ordner gesteuert werden. Bis zur Version 12 hat SpeedCommander beim Ausschneiden und Einfügen einer Datei im gleichen Ordner diese zu ‘dateiname [1].ext’ umbenannt. Mit SpeedCommander 13 wurde dieses unter Umständen nicht ganz saubere Verhalten abgestellt und stattdessen eine Fehlermeldung angezeigt. Mit diesem Kompatibilitätsschalter kann das alte Verhalten wieder reaktiviert werden.

Das Öffnen von Dateien beim Doppelklick erfolgt ab dieser Version wieder mit der Windows-Funktion ShellExecuteEx. Beim Verwenden der Kontextmenü-Funktionen (neu ab SpeedCommander 13) scheint es leider das eine oder andere kleine Problem zu geben.

Startbildschirm von SpeedCommander 9

Beim Startbildschirm von SpeedCommander 9 kam zum ersten Mal der Komet zum Einsatz, der SpeedCommander bis zur zwölften Version begleitete:

Erwähnenswert ist vielleicht noch, dass das für SpeedCommander 9 neuentwickelte Programmgerüst mit den Registerkarten abgesehen von der einen oder anderen Überarbeitung auch noch in der aktuellen Version weitgehend erhalten geblieben ist.

SpeedCommander 9 erschien im Oktober 2002, ein Jahr nach der Veröffentlichung von Windows XP.