mk-prg-net \visual-studio-2005

Visual Studio

Profile

VisualStudio 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 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.

Projekte und Projektmappen

Sichten auf den Code

Da VS 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.



Klassendiagramme (C#)

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.

Verweise

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

Private Assemblies

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

Globale Assemblies sind im Global Assembly Cache verzeichnet. Indem ein .NET Verweis in Verweise angelegt wird, wird eine globale Assembly eingebunden.

Globale Assemblies mit VS 2005 erzeugen

Schlüsseldatei erzeugen und Assembly signieren

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.

Installation im GAC
Selbstgebaute globale Assemblies im Fenster Verweise/.NET sichtbar machen

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

Einstellungen

Schriftart im Editor

Extras/Optionen/Umgebung/Schriftart

Sprachspezifisches Syntaxhighlighting, Intellisense

Extras/Optionen/Text Editor

Option Explicite, Strict für alle Projekte festlegen

Extras/Optionen/Projekte

Aufgabenliste

Tastenkombination: Strg + Alt + K

Dient zur Planung des Projektverlaufes. Die Elemente zur Planung sind Aufgaben. Jeder Aufgabe hat eine Priorität.

Funktionen:

Die einzelnen Kategorien können im Aufgabenfenster über das Kontext- Menü der Aufgabenliste abgerufen werden.

Steuerung der IDE über Kommandozeilen

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.

Tools wie ILDasm aus der IDE starten

VS bietet eine Infrastruktur an, um Kommandozeilentools wie ILDasm (Disassembler) oder SN (StrongName Tool) Kontextbezogen aus der IDE zu starten.

Assembly in der Projektausgabe disassemblieren

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:

Öffentlichen Schlüssel (Public Key) einer Strong Name Assembly bestimmen

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:




Onlinehilfe

Zum SDK wird eine umfangreiche Onlinehilfe mitgeliefert. Sie ist die primäre Dokumentation zum .NET Framework.

Zum angezeigten Thema den zugehörigen Eintrag im Inhalstverzeichnis finden

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.

Dynamische Hilfe

Aufg. Dynamische Hilfe öffnen, und im Quelltext Format- eingeben-> Infos zu Format aus der Hilfe holen.

Code- Schnippsel: Programmieren mit Vorlagen und Textbausteinen

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.

Globaler Aufbau einer Snippet - Datei

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>

Globaler Aufbau eines CodeSnippet

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>

Header

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>

Snippet

Der Snippet gliedert sich in einen Deklarations- und Codeblock.

<Snippet>      
   <Declarations>
     ...
   </Declarations>
   <Code Language="CSharp">
     ...
   </Code>
 </Snippet>      

Deklarationen

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>

Code

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>

Installations- und Weitergabeprojekte

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.

Verpacken zu verteilender Dateien in der Installationsdatei

Gemeinsam genutzte private Assemblys mehrere Projekte verteilen

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.

Ausschließen mehrfacher Einbindungen von privaten Assemblys

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.

Installation der MFC- und ATL- Bibliotheken

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.

Konfigurieren des Zielsystems

Registrierung im Global Assembly Cache

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)

Server Explorer

Mit dem Server Explorer können Resourcen auf dem Server wie Datenbankverbindungen, Dienste etc. verwaltet werden.

Datenbankverbindungen

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.