©
Martin Korneffel, Stuttgart der
VisualStudio 2005 integriert die Entwicklungsumgebungen für C++ und VB 6.0 in einer IDE. Um die Migration auf VS 2005 zu erleichtern, können traditionelle Tastaturbelegungen etc. eingestellt werden (z.B. Debug/Prozedurschritt unter VB: F8, unter C++: F10). Diese Sprachspezifischen Konfigurationen der Entwicklungsumgebung werden Profiles genannt.
Wird VS 2005 das erste Mal nach der Installation gestartet, dann kann die Auswahl des Profils auf der Startseite erfolgen.
Später kann das Profile über den Menüpunkt Extras/Einstellungen importieren-exportieren nachträglich geändert werden.
Da VS 2005 mehrerer Entwicklungsumgebungen integriert, gibt es viele Sprachspezifische Tools. Leider werden die Menüs nicht vollständig an den Projektkontext angepasst, so daß in einem C#- Projekt z.B. auch spezielle Fenster eines C++ Projektes abrufbar sind (z.B. Eigenschaftenmanager).
Im folgenden eine Liste allgemeiner Fenster, die alle sprachspezifischen Projekttypen anbieten:
Fenster |
Position |
Info |
---|---|---|
Projektexplorer |
Asicht/.. |
Aufzählung aller Projekte einer Projektmappe. Zu jedem Projekt werden alle Dateien und Verweise aufgelistet |
Codefenster |
Ansicht/Code (F7) |
C#- Code |
Codedefinitionsfenster |
Ansicht/Codedefinitionsfenster |
Zu jedem Symbol unter der Einfügemarke im Editor wird online die Definition (z.B. Klassendeklaration C1 für ein Objekt vom Typ C1) gesucht und angezeigt |
Klassenansicht |
Ansicht/.. |
Auflisten aller Klassen pro Projekt. Pro Klasse werden Basisklassen, Felder, Eigenschaften und Methoden aufgelistet |
Objektbrowser |
Ansicht/... |
Zu allen Namensräumen innerhalb eines Projektes werden die Klassen angezeigt. |
In der Klassenansicht unter C# kann ein spezieller Designer, das Klassendiagramm angelegt werden. Dieses stellt die Klassenhierarchien in UML- Klassendiagrammen dar. Die Diagramme sind editierbar, Eigenschaften und Methoden können hinzugefügt oder gelöscht werden. Die Änderungen werden als C#- Code in die Quelltextdateien durchgeschrieben.
.NET Projekte beginnen in der Regel nicht auf der grünen Wiese sondern setzen auf bereits fertiggestellten Bibliotheken auf. Diese werden in Form von DLL's (Assemblies) entweder auf der lokalen Festplatte oder auf eienem Webserver über einen URL bereitgestellt.
Werden private Assemblies eingesetzt, dann müssen diese in das Debug- oder Releaseverzeichnis kopiert werden. Dies erledigt VS 2005 automatisch, wenn ein Projektverweis unter Verweise auf das Projekt mit der DLL angelegt wird.
Befindet sich das Projekt nicht in der aktuellen Projektmappe, dann kann der Speicherort der benötigten Assembly über Verweise/Durchsuchen auch direkt angesteuert werden.
Globale Assemblies sind im Global Assembly Cache verzeichnet. Indem ein .NET Verweis in Verweise angelegt wird, wird eine globale Assembly eingebunden.
Ein C#/VB.NET- Projekt vom Typ Klassenbibliothek hat die Eigenschaftsseite Signierung. Hier kann die Option Assembly signieren angewählt werden. Wurde zuvor mit dem Tool sn.exe eine Schlüsselpaardatei angelegt, dann kann zu dieser in der Combobox unter Durchsuchen navigiert werden. Ist noch keine Schlüsseldatei vorhanden, dann kann eine neue mittels <neu> in der Combobox angelegt werden.
Wird die Assembly jetzt neu erstellt, dann führt der Linker die Signierung durch, und die Assembly hat ihren StrongName.
Assemblies im GAC sind nicht automatisch unter Verweise/.NET sichtbar. Dazu muß in der Registry der Speicherort der Assemblies über einen Schlüssel verzeichnet werden.
Der Schlüssel lautet:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx
Unter diesem ist ein weiterer Schlüssel anzulegen, in dem das Verzeichnis mit den zusätzlichen globalen Assemblydateien als Pfad beschrieben wird. Z.B.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\TRACS = C:\Programme\TRACS
Extras/Optionen/Umgebung/Schriftart
Extras/Optionen/Text Editor
Extras/Optionen/Projekte
Tastenkombination: Strg + Alt + K
Dient zur Planung des Projektverlaufes. Die Elemente zur Planung sind Aufgaben. Jeder Aufgabe hat eine Priorität.
Funktionen:
eigene Aufgabenbeschreibungen können hinzugefügt werden (Katelgorie Benutzer)
Kommentarzeilen im Quelltext, die mit TODO beginnen, werden angezeigt (Kategorie Komentare)
Aktuelle Syntaxfehler im Quelltext werden angezeigt (Kategorie Buildfehler)
Die einzelnen Kategorien können im Aufgabenfenster über das Kontext- Menü der Aufgabenliste abgerufen werden.
Die IDE kann über Kommandozeilen- Befehle gesteuert werden. Dazu ist das Befehlsfenster über Ansicht/Andere Fenster/Befehlsfenster zu starten. Durch eingabe von >cmd wird das Befehlsfenster in den Befehlsmodus umgeschaltet. Befehle um Unterprogramme aus den Menüs zu Starten haben allg. die Form Menüname.Aktion. Z.B. öffnen eines neuen Projektes kan gestartet werden durch Datei.NeuesProjekt.
VS bietet eine Infrastruktur an, um Kommandozeilentools wie ILDasm (Disassembler) oder SN (StrongName Tool) Kontextbezogen aus der IDE zu starten.
Mittels des SDK- Tools ILDasm.exe kann eine Assembly disassembliert werden. So kann man Einblick in den Aufbau einer Assembly gewinnen. Der ILDasm ist ein Kommandozeilentool. Über den Menüpunkt
Extras/Externe Tools
kann der Aufruf in die IDE integriert werden. Dazu einen neuen Eintrag im erscheinenden Dialog hinzufügen und seine Eingabefelder wie folgt ausfüllen:
Besitzen Assemblies einen starken Namen, dann kann es notwendig sein, ihren öffentlichen Schlüssel zu bestimmen. Wurde die Assembly nicht im global Assembly Cache geladen, dann muß da Kommandozeilentool SN.exe eingesetzt werden. Um die Arbeit etwas zu automatisieren, kann SN.exe aus der IDE gestartet werden. Auch ist ein Kommandozeilentool. Über den Menüpunkt
Extras/Externe Tools
kann der Aufruf in die IDE integriert werden. Dazu einen neuen Eintrag im erscheinenden Dialog hinzufügen und seine Eingabefelder wie folgt ausfüllen:
Zum SDK wird eine umfangreiche Onlinehilfe mitgeliefert. Sie ist die primäre Dokumentation zum .NET Framework.
Zu jeder Hilfetafel
kann der zugehörige Eintrag im Inhaltverzeichnis aufgeklappt
werden über die Funktion Mit Inhaltsverzeichnis
synchronisieren welche über den Symbolleistenlink
gestartet wird. So können über Index oder
Suchen gefundene Tafeln schnell in den gesamten Kontext
des Dokumentes eingeordnet werden.
Aufg. Dynamische Hilfe öffnen, und im Quelltext Format- eingeben-> Infos zu Format aus der Hilfe holen.
Beim Arbeiten mit einer Textverarbeitung ist der Einsatz von Dokumentvorlagen und Textbausteinen Stand der Technik. Auch in einer Entwicklungsumgebung, in der viel Quelltext erstellt wird, wären ähnliche Techniken sinnvoll.
In Visual Studio 2005 kann der Programmierer seine Textbausteine anlegen, indem er mittels sog. Code Snippets das Intellisense - System erweitert. Ein Code- Snippet ist eine XML- Datei, welche entsprechen dem Schema für den Namensraum http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet aufgebaut ist.
In einer Snippet- Datei können mehrer CodeSnippets definiert werden. Entsprechend enthält der Name des Wurzelelementes den Plural für Code Schnippsel: codeSnippets.
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <!-- CodeSnippet 1 --> </CodeSnippet> ... <CodeSnippet Format="1.0.0"> <!-- CodeSnippet 1 --> </CodeSnippet> </CodeSnippets>
Jeder Code Schnippsel besteht aus einem Header mit Metainformationen wie Autor des Schnippsels, Titel usw. sowie dem Snippet Abschnitt, welcher den eigentlichen CodeSnippet enthält:
<CodeSnippet Format="1.0.0"> <!-- Metainformationen eines Codeschnippsels --> <Header> ... </Header> <!-- Der Codeschnippsel --> <Snippet> ... <Snippet> </CodeSnippet>
Im Header werden Metainformationen wie Autor, Titel und Schlüsselwort für Intellisense festgelegt:
<!-- Metainformationen eines Codeschnippsels --> <Header> <Author> Martin Korneffel </Author> <Title> Kommentar- Kopf einer Kompilationseinheit </Title> <SnippetTypes> <!-- Legt fest, dass der Codeschnippsel an der aktuellen Cursorposition im Editor eingefügt werden soll --> <SnippetType>Expansion</SnippetType> </SnippetTypes> <!-- Nach Eingabe des in Shortcut definierten Schlüsselwortes bietet Intellisense den Codeschnippsel in einer Liste an --> <Shortcut>babaros_unit_header</Shortcut> </Header>
Der Snippet gliedert sich in einen Deklarations- und Codeblock.
<Snippet> <Declarations> ... </Declarations> <Code Language="CSharp"> ... </Code> </Snippet>
Im Deklarationsblock können Platzhalter für einfache Textersetzungen oder Objektdefinitionen definiert werden.
<Declarations> <Literal> <ID>Projektkontext</ID> <ToolTip>Verweis auf Projektkontext</ToolTip> <Default>Projektkontext</Default> </Literal> <Literal> <ID>Dateiname</ID> <ToolTip>Name der Kompilationseinheit</ToolTip> <Default>Dateiname</Default> </Literal> <Literal> <ID>Kurzbeschreibung</ID> <ToolTip>Kurzbeschreibung des Inhaltes der Kompilationseinheit</ToolTip> <Default>Kurzbeschreibung</Default> </Literal> <Literal> <ID>Autor</ID> <ToolTip>Autor der Kompilationseinheit</ToolTip> <Default>Martin Korneffel (mko)</Default> </Literal> </Declarations>
Der Codeblock enthält das eigentliche Codefragment mit Platzhaltern für Text- und Objektersetzungen
<Code Language="CSharp"> <![CDATA[ //---------------------------------------------------------------- // // TRACS - Optische Computer Sensorik // Stuttgart, den // // Projekt.......: $Projektkontext$ // Name..........: $Dateiname$ // Aufgabe/Fkt...: $Kurzbeschreibung$ // // // // // //------------------------------------------------------------------ // Zielmaschine..: PC // Betriebssystem: Windows XP mit .NET 2.0 // Werkzeuge.....: Visual Studio 2005 // Autor.........: $Autor$ // Version 1.0...: // // //------------------------------------------------------------------ // // Version.......: 1.1 // Autor.........: $Autor$ // Datum.........: // Änderungen....: // //</unit_history> //</babaros_unit_header> ]]> </Code>
Diese Projekttypen haben die Erstellung einer MSI- Datei für den Microsoft Installer zum Ziel. Damit können alle .exe und .dll Dateien und die zugehörigen Konfigurationseinstellungen in einer Installationsdatei verpackt, und an den Kunden verteilt werden.
Nutzen innerhalb einer Projektmappe mehrere Projekte gemeinsam einen Satz private Assemblys, dann müssen alle Projekte in einem gemeinsamen Anwendungsordner plaziert werden. Über die automatische Auflösung der Abhängigkeiten werden die privaten Assemblys im Anwendungsordner bereitgestellt.
Werden zwei Projekte in einen gemeinsamen Anwendungsordner plaziert, und nutzen beide dieselbe private Assembly, dann kann diese mehrfach eingebunden werden. In diesem Falle ist eine der Einbindungen über Eigenschaften/Exclude von der Weitergabe auszuschließen.
Sind Assemblys von den MFC- und ATL Bibliotheken abhängig, dann werden diese Abhängigkeiten im Weitergabeprojekt dokumentiert. Damit die MFC und ATL Bibliotheken auch tatsächlich auf dem Zielsystem installiert werden, könne diese über die Eigenschaften vom Weitergabeprojekt unter Erforderliche Komponenten als Installationsvoraussetzung definiert werden. Das Installationsprogramm prüft dann das Vohandensein der MFC und ATL Bibliotheken ab uns installiert sie gegebenenfalls.
Soll eine Assembly mit StrongName im Global Assembly Cache registriert werden, dann muss in der Ansicht Dateisystem der spezielle Ordner Cacheordner für globale Assembly angelegt werden. In diesem ist ein Verweis auf die primäre Projektausgabe der zu installierenden Assembly einzurichten. Achtung: Die Assembly selbst muß zusätzlich im Anwendungsordner plaziert werden, damit sie auch physisch auf dem System vorhanden ist.
Damit Visual Studio später auf diese Assembly verweisen kann, muß noch ein Schlüssel in der Registry hinzuugefügt werden (siehe Selbstgebaute globale Assemblies im Fenster Verweise/.NET sichtbar machen)
Mit dem Server Explorer können Resourcen auf dem Server wie Datenbankverbindungen, Dienste etc. verwaltet werden.
Achtung: Datenbankverbindungen werden verschlüsselt gespeichert. Die Verschlüsselung ist dabei mit dem Passwort verknüpft, welches beim Anmelden am Windows- System verwendet wird. Wird das Passwort geändert, so sind die Datenbankverbindungen nicht mehr lesbar, und müssen neu angelegt werden. Ein Seiteneffekt dabei ist, das solange nicht lesbare Datenbankverbindungen noch im Serverexplorer existieren, auch Datasets, die diese Nutzen, nicht geöffnet werden können.