Arbeiten mit .NET: Allgemeines/ Entwicklungsumgebungen/ Notepad

Aus Wikibooks

Zum Programmieren genügt grundsätzlich ein einfacher Editor. Die Arbeitsweise damit wird in diesem Kapitel kurz dargestellt.

Komfort oder Einfachheit[Bearbeiten]

Mit einem einfachen Editor verzichtet man auf jeglichen Komfort, den eine umfassende IDE bietet. Es fehlt Unterstützung für folgende Punkte:

  • Syntax-Hervorhebung (bei Notepad++ vorhanden)
  • Code-Vervollständigung
  • Zusammenfassung mehrerer Quelltexte zu Projekten
  • schneller Wechsel zum Compiler mit Debugger
  • integrierte Hilfe zum .NET Framework

IDE steht für Integrated Development Environment, also Integrierte Entwicklungsumgebung, und bezeichnet ein Programmpaket, das all diese Punkte zusammenfasst und noch vieles mehr anbietet.

Belohnt wird man bei der Arbeit "nur mit Editor" damit, dass das Betriebssystem wenig belastet wird und die einzelnen Schritte schnell erledigt werden, weil der "Ballast" der IDE entfällt. Auch kann man beim Kunden "vor Ort" schnell Nachbesserungen vornehmen, weil Betriebssystem und Framework alle Bestandteile direkt zur Verfügung stellen.

Quelltext-Editor[Bearbeiten]

Die Quelltexte können in jedem beliebigen Text-Editor bearbeitet werden.

Der einfache Editor Notepad[Bearbeiten]

Dieser Editor wird mit Windows mitgeliefert. Sie können eine oder nacheinander mehrere Quelldateien damit erstellen und speichern. Um daraus eine Anwendung für .NET zu erstellen, muss der Compiler manuell aufgerufen werden.

Notepad++ mit Syntaxdarstellung[Bearbeiten]

Notepad++ ist ein kostenloser Editor, der für eine Reihe von Programmiersprachen die Syntax farbig darstellen kann. Anders als bei Notepad können mehrere Dateien gleichzeitig geöffnet sein; durch Plugins lässt sich auch der nächste Schritt "Compiler aufrufen" einbinden. Nähere Informationen siehe Weblinks.

Sie können eine oder mehrere Quelldateien damit erstellen und speichern. Um daraus eine Anwendung für .NET zu erstellen, muss der Compiler manuell aufgerufen werden.

Ein erstes Projekt[Bearbeiten]

Die folgenden Beschreibungen beziehen sich auf Notepad++. Wenn Sie stattdessen mit dem einfachen Editor arbeiten, entfallen ein paar Erleichterungen, aber Sie können analog vorgehen.

Hello World[Bearbeiten]

Das einfachste Programm ist ein Hello World-Programm, das lediglich diesen Text ausgibt. Ein solches Programm dient seit Urzeiten in Lehrbüchern einmal als Test für den Lernenden, um sich mit der Programmierumgebung vertraut zu machen und zu prüfen, ob alles funktioniert. Andererseits zeigt es die notwendige Grundstruktur eines Programms auf. Ein solches Programm enthält eigentlich nur die folgenden Zeilen:

Hello World als Einstieg
C++-Quelltext
System::Console::WriteLine("Hello World");
System::Console::WriteLine("Ende mit beliebiger Taste");
System::Console::ReadKey();
C#-Quelltext
System.Console.WriteLine("Hello World");
System.Console.WriteLine("Ende mit beliebiger Taste");
System.Console.ReadKey();
Delphi.Prism-Quelltext
System.Console.WriteLine('Hello World');
System.Console.WriteLine('Ende mit beliebiger Taste');
System.Console.ReadKey();
VB.NET-Quelltext
System.Console.WriteLine("Hello World")
System.Console.WriteLine("Ende mit beliebiger Taste")
System.Console.ReadKey()


"Mein neues Auto" als Einstieg[Bearbeiten]

Wir wollen ein etwas größeres Projekt vorbereiten, das später ausführlicher besprochen werden soll.

Eine Projektmappe (Englisch solution, also Problemlösung) enthält mehrere, in der Regel inhaltlich zusammengehörende Projekte. Ein Projekt (project) enthält alles, was zum Erstellen einer einzelnen Assembly (exe- oder dll-Datei) unter .NET notwendig ist. Bei der Arbeit über einen einfachen Editor sind Sie selbst verantwortlich dafür, dass alle zu einem Projekt gehörenden Dateien sinnvoll gegliedert sind und beim Compilieren zur Verfügung stehen. Erstellen Sie deshalb zunächst ein Arbeitsverzeichnis, beispielsweise:

E:\Eigene Dateien\NET Projects\Wikibooks\Einstieg

Das folgende Programm wird auch im Kapitel "Mein neues Auto" als erstes Programm bei jeder Programmiersprache besprochen. Einzelheiten des Codes werden deshalb hier überhaupt nicht erklärt; jetzt geht es uns nur um die Möglichkeiten der IDE mit der Eingabe des Codes, dem Erstellen des Programms und der Fehlersuche.

Der Quelltext-Editor[Bearbeiten]

Öffnen Sie den Editor und wählen Sie Datei > Neu. Wählen Sie unter Sprache die gewünschte Programmiersprache aus. Speichern Sie die (noch leere) Datei sofort unter dem Namen Program.

Schreiben Sie dann den untenstehenden Code, und zwar bis einschließlich der ersten Zeile mit WriteLine. Beenden Sie den Code mit den drei Schlusszeilen.

Beachten Sie bei Notepad++ die folgenden Besonderheiten der Anzeige:

  • Bestimmte Abschnitte des Codes sind farbig. Diese Funktion heißt Syntaxhervorhebung. Blaue Wörter sind zum Beispiel Begriffe, die im Code eine besondere Bedeutung haben, sogenannte Schlüsselwörter (dazu später mehr).
  • Die Wörter in Anführungszeichen sind Zeichenketten, die im Programm erscheinen, wie wir gleich sehen.
  • Mit der TODO-Anweisung können Sie sich selbst darauf hinweisen, was hier noch zu erledigen ist.

Wegen der Übersichtlichkeit sollten Sie grundsätzlich den Text gliedern und sinnvoll einrücken (wie im Beispiel).

Es ist nicht erforderlich, dass Sie alle Informationen verstehen. Hilfestellung bei der Eingabe bekommen Sie freilich nicht; es handelt sich eben nur um einen (komfortablen) Editor, nicht um eine Programmierumgebung.

Das Hauptprogramm
C#-Quelltext
using System;

namespace Wikibooks.CSharp.Mein_neues_Auto
{
	class Program
	{
		public static void Main(string[] args)
		{
			string input;
			if (DateTime.Now.Hour < 12) {
				Console.Write("Guten Morgen, ");
			} else if (DateTime.Now.Hour < 18) {
				Console.Write("Grüß Gott, ");
			} else 
				Console.Write("Guten Abend, ");
			Console.WriteLine(Environment.UserName);
			
			// Typ abfragen
			Console.WriteLine("Welchen Typ Auto wollen Sie sich zulegen?");
			input = Console.ReadLine();
			Car mycar = new Car(input, "998cm³ 44kW", 3);
			Console.WriteLine(mycar.ToString());
			// beschleunigen
			mycar.Accelerate(40);
			mycar.ShowValues();
			// rechts blinken
			mycar.SetRightSignal(true);
			mycar.ShowValues();
			// etwas bremsen
			mycar.Delay(20);
			mycar.ShowValues();
			// Blinker aus
			mycar.SetRightSignal(false);
			mycar.ShowValues();
			// wieder beschleunigen
			mycar.Accelerate(30);
			mycar.ShowValues();
			// Warnblinker ein
			mycar.SetBothSignals(true);
			mycar.ShowValues();
			// bremsen bis auf 0
			mycar.Delay(mycar.Speed);
			mycar.ShowValues();
			// Warnblinker aus
			mycar.SetBothSignals(false);
			mycar.ShowValues();
			                  
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}
VB.NET-Quelltext
Imports System

Namespace Wikibooks.VBNet.Mein_neues_Auto
	Module Program
		Sub Main(ByVal args As String())
			Dim input As String
			If DateTime.Now.Hour < 12 Then
				Console.Write("Guten Morgen, ")
			ElseIf DateTime.Now.Hour < 18 Then
				Console.Write("Grüß Gott, ")
			Else
				Console.Write("Guten Abend, ")
			End If
			Console.WriteLine(Environment.UserName)
			
			' Typ abfragen
			Console.WriteLine("Welchen Typ Auto wollen Sie sich zulegen?")
			input = Console.ReadLine()
			Dim mycar As New Car(input, "998cm³ 44kW", 3)
			Console.WriteLine(mycar.ToString())
			' beschleunigen
			mycar.Accelerate(40)
			mycar.ShowValues()
			' rechts blinken
			mycar.SetRightSignal(True)
			mycar.ShowValues()
			' etwas bremsen
			mycar.Delay(20)
			mycar.ShowValues()
			' Blinker aus
			mycar.SetRightSignal(False)
			mycar.ShowValues()
			' wieder beschleunigen
			mycar.Accelerate(30)
			mycar.ShowValues()
			' Warnblinker ein
			mycar.SetBothSignals(True)
			mycar.ShowValues()
			' bremsen bis auf 0
			mycar.Delay(mycar.Speed)
			mycar.ShowValues()
			' Warnblinker aus
			mycar.SetBothSignals(False)
			mycar.ShowValues()
			
			Console.Write("Press any key to continue . . . ")
			Console.ReadKey(True)
		End Sub
	End Module
End Namespace


Datei(en) speichern[Bearbeiten]

Vor dem nächsten Schritt müssen Sie die betroffenen Quelldateien speichern. Über Einstellungen > Optionen kann festgelegt werden, dass Sicherungskopien anzulegen sind. Wenn Sie während umfangreicher Arbeiten nicht kompilieren, sondern den Editor beenden, können Sie die geänderten Dateien gezielt speichern. Welche Dateien seit der letzten Speicherung geändert wurden, ersehen Sie aus dem farbigen Disketten-Symbol    Program.cs    beim Dateinamen. Sie können so speichern:

  • mit einem Klick auf das Diskettensymbol oder Strg + S die aktuelle Datei
  • mit einem Klick auf den Diskettenstapel oder Strg + Shift + S alle geöffneten Dateien.

Das Kompilieren[Bearbeiten]

Vorbereitung nur für C# und C++: Fügen Sie hinter das letzte else eine öffnende Klammer { ein.

Zunächst muss das Programm erstellt, also kompiliert werden. Das bedeutet, dass der ursprüngliche (von Ihnen geschriebene) Code in den .NET-Zwischencode übersetzt werden muss. Zum .NET Framework gehören die (Standard-) Compiler immer dazu. Sie sind zu finden im Verzeichnis [System]\Microsoft.NET\Framework\[Version] und heißen:

  • csc.exe für C++, C#
  • vbc.exe für Visual Basic.NET
  • jsc.exe für JScript
Eine Batchdatei als Erleichterung

Vorbereitung allgemein: Weil dazu eine Menge von Optionen gehören, erstellen wir zunächst eine passende Batchdatei. Wählen Sie Datei > Neu und legen als Sprache "Batch" fest. Geben Sie dann den folgenden Inhalt ein:

Batchdatei für den C#-Compiler csc.exe
@echo off
set compiler=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe
set source=E:\Dokumente\Wikibooks\Arbeiten mit NET\Einstieg
set dest=%source%\Mein neues Auto.exe
%compiler% /out:"%dest%" /target:exe /reference:System.Drawing.dll "%source%\*.cs" 
pause
Batchdatei für den VB-Compiler vbc.exe
@echo off
set compiler=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe
set source=E:\Dokumente\Wikibooks\Arbeiten mit NET\Einstieg
set dest=%source%\Mein neues Auto.exe
%compiler% /out:"%dest%" /target:exe /imports:System.Drawing.dll,System.Drawing "%source%\*.vb" 
pause

Dabei sind die folgenden Festlegungen einzutragen:

  • für compiler der o.g. Pfad und Dateiname des Compilers
  • für source der Pfad, in dem die Quelldateien gespeichert werden
  • für dest (= destination) Pfad und Name der Anwendung

Mehr Informationen zu den Optionen der vorletzten Zeile finden Sie in der .NET-Hilfe zum jeweiligen Compiler. Speichern Sie dann diese Datei unter einem passenden Namen, z.B. netcreate.bat, an einer Stelle, die vom Betriebssystem aus erreichbar ist.

Kompilieren mit einem Fehler

Starten Sie nun diese Batchdatei: in der Eingabeaufforderung, über Start > Programme, im Windows-Explorer oder in einem Commander.

Leider enthält das Programm Fehler, die uns der Compiler mitteilt:

// bei C# und C++
Program.cs(33,2) : error CS1513: } erwartet.
' bei VB
Program.vb(17,0) : error BC30081: "If" muss mit einem zugehörigen "End If" abgeschlossen werden.

VB ist in diesem Fall genauer, weil die richtige Stelle angegeben wird. Das letzte Else wurde mit End abgeschlossen, es muss aber – wie die Fehlermeldung feststellt – mit End If beendet werden.

Bei den C-Varianten wird nur festgestellt, dass die Klammerpaare {...} nicht zusammenpassen: Es gibt eine öffnende Klammer ohne dazugehörige schließende Klammer. Wechseln Sie also zum Editor; in diesem Fall ist es einfach: Zu der unter Vorbereitung eingegebenen Klammer fehlt der Partner; machen Sie dazu nach dem nächsten Write-Befehl eine neue Zeile und schreiben Sie die fehlende Klammer } hin. Sie werden sofort sehen, zu welchem Partner diese gehört. Probieren Sie das Schreiben dieser Klammern aus; in der Regel sollten Sie zu einer öffnenden Klammer sofort den Partner schreiben, der folgende Code gehört dann dazwischen.

Speichern Sie die geänderte Datei.

Kompilieren mit einer Warnung

Kompilieren Sie das Programm erneut mit netcreate.bat. Es sollte keine Fehler mehr aufweisen, liefert aber noch eine Warnung:

// bei C# und C++
Die Variable input ist deklariert, wird aber nicht verwendet.
' bei VB 
Nicht verwendete lokale Variable: input.

Warnungen können theoretisch ignoriert werden; das Programm kann trotzdem ablaufen. In aller Regel ist damit aber eine Unsauberkeit im Code enthalten; deshalb sollten Sie sich immer um die Beseitigung von Warnungen kümmern. Hier wurde sie provoziert: Kopieren Sie den gesamten noch fehlenden Programmtext und speichern Sie die geänderte Datei.

Kompilieren mit weiteren Fehlern

Kompilieren Sie erneut. Nun gibt es eine Menge gleichartiger Fehlermeldungen:

Der Typ- oder Namespacename Car konnte nicht gefunden werden.
// bei C++, C#
(Fehlt eine using-Direktive oder ein Assemblyverweis?)
' bei VB
(Fehlt eine Imports-Direktive oder ein Assemblyverweis?)

Nun ja, die Definition der Klasse Car fehlt noch völlig. Also erstellen wir eine weitere Quelldatei:

  • Für C# mit Rechtsklick auf Car.cs mit der Auswahl "Ziel speichern unter" dem Namen Car.cs im Quellverzeichnis
  • Für VB mit Rechtsklick auf Car.vb mit der Auswahl "Ziel speichern unter" dem Namen Car.vb im Quellverzeichnis

Zur Kontrolle können Sie diese Datei mit dem Editor öffnen und überprüfen. Damit können wir erneut und endgültig kompilieren; es sollten keine Meldungen bleiben.

Das Ausführen[Bearbeiten]

Jetzt können wir das Programm ablaufen lassen. Es wird gestartet wie jedes andere Programm auch:

  • in der Eingabeaufforderung direkt "Mein neues Auto" aufrufen (wegen des Leerzeichens sind die Gänsefüßchen notwendig)
  • durch Doppelklick im Inhaltsverzeichnis z.B. des Windows-Explorers oder eines Commanders

Der Programmablauf öffnet ggf. ein Konsolenfenster und schreibt die gewünschten Zeilen:

Ausgabe
'"`UNIQ--syntaxhighlight-00000010-QINU`"'

Darin werden Ausgabezeilen angezeigt, nämlich alles, was mit Write und WriteLine angegeben wurde, und es enthält verschiedene Eingaben, nämlich einmal ReadLine und einmal ReadKey. Vor allem der letzte Befehl, der auf die Eingabe einer beliebigen Taste wartet, ist bei einer Console-Anwendung nützlich; wenn er fehlt, wird das Programm beendet, ohne dass Sie die letzte Ausgabe sehen oder gar lesen können.

Fehlersuche ohne Debugger[Bearbeiten]

Dass es keinen Debugger gibt, ist das Hauptmanko bei der Arbeit mit einem einfachen Editor: Es gibt keinerlei Möglichkeit, ein Programm zur Laufzeit zu untersuchen. Sie können lediglich die Mittel, die .NET sowieso anbietet, intensiv nutzen:

  • An allen Stellen, wo aktuelle Werte zu prüfen sind, wird Console.WriteLine bzw. MessageBox.Show eingebaut.
    Dieses Verfahren ist einfach zu handhaben, es ist aber umständlich, an bestimmte Informationen zu kommen, liefert wenig Hinweise und behindert den eigentlichen Programmablauf.
  • Oder Sie nutzen die Klassen des System.Diagnostic-Namespace, vor allem Debug.Listeners und Trace.Listeners.
    Diese Verfahren sind erheblich informativer, verlangen aber mehr Einarbeitung.

Für beide Situationen gilt: Ein "richtiger" Debugger, wie er in einer IDE enthalten ist, ist äußerst nützlich.

Erleichterung fürs Kompilieren[Bearbeiten]

Ein Compiler kann statt über die Eingabeaufforderung auch so gestartet werden:

  • Die Pfade zum Compiler und zu den Quelldateien können über die Umgebungsvariable path gesetzt werden, sodass sie immer bekannt sind.
  • Die oben vorbereitete Batchdatei kann ausgearbeitet werden, sodass die vielfältigen Optionen immer bereitstehen.
  • Auch nmake, das ursprünglich für C-Compiler gedacht war, kann verwendet werden.

Über Parameter werden die Quelldateien und Ressourcen zusammengefasst und die Ausgabe gesteuert. Ausführliche Erläuterungen sind über die .NET-Hilfe zu finden.

Zusammenfassung[Bearbeiten]

Bereits mit einem einfachen Editor lassen sich Programme für .NET entwickeln. Erheblich mehr Komfort bieten vollständige Entwicklungsumgebungen (IDE); zwei davon stellen wir Ihnen in den nächsten Kapiteln kurz vor. Der einfache Editor ist meistens nur eine Notlösung; vor allem zum Lernen bieten die IDEs erheblich mehr Unterstützung.