Monorepository mit C#: Code-Organisation für Anfänger
In der modernen Entwicklung mit C# (.NET) stellt sich früher oder später die Frage: Wie organisiert man Code, wenn man mehrere Projekte hat – eine Klassenbibliothek, eine Web-API, eine Konsolenanwendung, Tests? Viele Anfänger erstellen für jeden Teil separate Repositorys, was zu Verwirrung bei Versionen und Abhängigkeiten führt. Eine Alternative ist das Monorepository (Monorepo). In diesem Artikel schauen wir uns an, was ein Monorepository ist, wie man es in C# einrichtet und warum es das Leben für Anfänger vereinfacht.
Was ist ein Monorepository?
Ein Monorepository ist ein Ansatz, bei dem der gesamte Code mehrerer zusammenhängender Projekte in einem einzigen Git-Repository gespeichert wird. Sie könnten beispielsweise eine gemeinsame Bibliothek MyApp.Shared, eine Webanwendung MyApp.Web und ein Konsolentool MyApp.Cli haben – alles in einem Ordner, mit einer einzigen .sln-Datei.
Im Kontext von C# (.NET) bedeutet ein Monorepository normalerweise eine einzelne Visual Studio Solution, die mehrere Projekte enthält. Dies ist besonders praktisch für:
- Gemeinsame Nutzung von Code (über Project References, nicht über NuGet-Pakete).
- Einen einheitlichen Build- und CI/CD-Prozess.
- Vereinfachte Versionsverwaltung (ein Branch – alle Änderungen auf einmal).
Vorteile eines Monorepositorys für Anfänger
Wenn Sie gerade erst anfangen, C# zu lernen, hilft Ihnen ein Monorepository, typische Fehler zu vermeiden:
- Einfache Navigation – alle Projekte an einem Ort, kein Wechsel zwischen Repositorys nötig.
- Sofortige Verbindung – eine Änderung in der Bibliothek ist sofort in den abhängigen Projekten sichtbar.
- Einheitlicher Stil – Sie können eine einzige
.editorconfigoderDirectory.Build.propsfür alle Projekte konfigurieren. - Einfaches Ausführen von Tests – mit einem Befehl
dotnet testwird die gesamte Lösung getestet.
Erstellen einer Monorepository-Struktur: Schritt-für-Schritt-Anleitung
Schritt 1. Stammordner und Lösung erstellen
Öffnen Sie das Terminal und führen Sie Folgendes aus:
mkdir MyMonorepocd MyMonorepodotnet new sln -n MyAppJetzt haben Sie eine Datei MyApp.sln – das ist der Einstiegspunkt für Visual Studio oder Rider.
Schritt 2. Projekte hinzufügen
Erstellen wir drei Projekte: eine Klassenbibliothek, eine Web-API und eine Konsolenanwendung. Der Einfachheit halber legen wir sie in Unterordner src ab:
mkdir srccd srcdotnet new classlib -n MyApp.Shareddotnet new webapi -n MyApp.Webdotnet new console -n MyApp.Clicd ..Jetzt binden wir sie an die Lösung:
dotnet sln add src/MyApp.Shared/MyApp.Shared.csprojdotnet sln add src/MyApp.Web/MyApp.Web.csprojdotnet sln add src/MyApp.Cli/MyApp.Cli.csprojSchritt 3. Abhängigkeiten zwischen Projekten konfigurieren
Angenommen, MyApp.Web und MyApp.Cli verwenden Klassen aus MyApp.Shared. Anstatt die Bibliothek in NuGet zu veröffentlichen, fügen Sie einfach einen Project Reference hinzu:
dotnet add src/MyApp.Web/MyApp.Web.csproj reference src/MyApp.Shared/MyApp.Shared.csprojdotnet add src/MyApp.Cli/MyApp.Cli.csproj reference src/MyApp.Shared/MyApp.Shared.csprojJetzt erscheint in der Datei MyApp.Web.csproj der Abschnitt:
<ItemGroup> <ProjectReference Include="..\\MyApp.Shared\\MyApp.Shared.csproj" /></ItemGroup>Schritt 4. Gemeinsamen Code schreiben
Im Projekt MyApp.Shared erstellen wir eine einfache Klasse:
// src/MyApp.Shared/GreetingService.csnamespace MyApp.Shared;
public class GreetingService{ public string GetGreeting(string name) => $"Hallo, {name}! Willkommen im Monorepository.";}Jetzt verwenden wir sie in der Konsolenanwendung:
// src/MyApp.Cli/Program.csusing MyApp.Shared;