Setup eines neuen Projektes mit der dotnet core CLI

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

Quellen

josephwoodward.co.uk