Für das Einrichten des neuen Projektes wird hier die dotnet
CLI in Version 2.0 verwendet.
Projekt Struktur
Die Struktur sollte sich an diesem Beispiel orientieren. Die Funktionen der Ordner werden im weiteren Verlauf noch genauer beschrieben.
KK.SolutionName
├ src
│ ├ KK.SolutionName.Web
│ │ └ KK.SolutionName.Web.csproj
│ ├ KK.SolutionName.Lib
│ └ ...
├ test
│ ├ KK.SolutionName.Lib.Tests
│ │ └ KK.SolutionName.Lib.Tests.csproj
│ └ ...
├ .gitignore
├ global.json
├ Readme.md
└ KK.SolutionName.sln
Folgende Punkte sind bei der Struktur zu beachten:
- Namen von Solutions und Projekten spiegeln immer den zu verwendenden Namespace wieder welcher dann auch in der Anwendung selbst verwendet wird.
- Die Trennung in
src
undtest
erleichtert später das Arbeiten mit den Lösungen auf den Build-Maschinen. - Das
Readme.md
beinhaltet die Beschreibung der Lösung im Allgemeinen- Eigenheiten der Projekte sollten in eigenen Readme-Dateien in den jeweiligen Projektordnern abgelegt werden.
- Jedes Projekt erhält seinen eigenen Ordner.
- Leerzeichen sollten generell bei der Benennung vermieden werden.
- Wie in C# üblich sollte die Benennung auch hier im CamelCase erfolgen
Solution anlegen
Zu Beginn wird ein neuer Ordner angelegt mit dem Namespace der Solution als Name. Dieser wird später auch das Git-Repository darstellen, welches den gleichen Namen erhält.
Diese Art der Benennung vereinfacht den Umgang mit verschiedenen Lösungen und deren Git-Repositories in einen Ordner auf der Festplatte.
mkdir KK.SolutionName
cd KK.SolutionName
Die Dateien
Readme.md
und.gitignore
müssen in diesem Fall noch von Hand erstellt werden.
Als nächstes werden die Dateien im Wurzelverzeichnis angelegt. Dafür werden folgende Befehle im Wurzelverzeichnis der Solution ausgeführt:
dotnet new sln -n KK.SolutionName
dotnet new globaljson
mkdir src
mkdir test
Projekt anlegen
Beispielhaft wird hier gezeigt wie man eine neue Webanwendung und eine Class-Library anlegt. Des Weiteren wird eine Projektreferenz und ein Testprojekt für die Class-Library hinzugefügt.
Projekt erstellen
Ein neues Web-Projekt wird wie folgt erstellt:
Eine Liste verfügbarer
dotnet new
Vorlagen erhält man durch die Eingabe von:dotnet new --help
dotnet new angular -n KK.SolutionName.Web -o src\KK.SolutionName.Web
Das Äquivalent dazu für die Class-Library:
dotnet new classlib -n KK.SolutionName.Lib -o src\KK.SolutionName.Lib
Das Test-Projekt wird so erstellt:
dotnet new mstest -n KK.SolutionName.Lib.Tests -o test\KK.SolutionName.Lib.Tests
Projekte der Solution hinzufügen
Die Projekte müssen noch der Solution-Datei hinzugefügt werde.
dotnet sln add src\KK.SolutionName.Web\KK.SolutionName.Web.csproj
Dieser Befehl wird für alle Projekte welche vorher angelegt wurden wiederholt.
Es ist duchaus machbar mehrere Solutions zu haben welche unterschiedliche Projekte beinhalten, allerdings sollte diese Option nur in Betracht gezogen werden wenn es gute Gründe dafür gibt.
Projekte verknüpfen
Die notwendigen Projekt-Referenzen fügt man mit diesem Befehl hinzu:
dotnet add src\KK.SolutionName.Web\KK.SolutionName.Web.csproj reference src\KK.SolutionName.Lib\KK.SolutionName.Lib.csproj
Nuget Verwaltung
Nuget-Pakete werden in der Regel über Visual Studio verwaltet aber die CLI bietet auch hier Möglichkeiten.
Paket hinzufügen
Möchte man seinem Projekt ein Nuget-Paket hinzufügen behilft man sich folgendermaßen:
dotnet add src\KK.SolutionName.Web\KK.SolutionName.Web.csproj package Microsoft.Extensions.Options.ConfigurationExtensions
Befindet man sich bereits im Projekt Ordner kann die Angabe des Projektes entfallen.
Paket aktualisieren
Möchte man auf eine neuere Version eines Paketes aktualisieren muss nur der add
Befehl erneut eingegeben werden ohne Angabe einer Version.
Paket entfernen
Wie folgt entfernt man ein Paket wieder aus einem Projekt:
dotnet remove src\KK.SolutionName.Web\KK.SolutionName.Web.csproj package Microsoft.Extensions.Options.ConfigurationExtensions
Fazit
Das sieht nach einem sehr umständlichen Weg aus und man fragt sich warum man das überhaupt so machen sollte.
Leider bietet die Visual Studio -> File -> New
Möglichkeit nur eine sehr starre Projektstruktur welche sich in der Praxis als nicht ausreichend erwies.
Verwenden alle Projekte eine gleiche Struktur reduziert sich die Einarbeitungszeit und man kann Abläufe besser standardisieren.