Zweitägiger Workshop zur Roslyn-basierten Compile-Time-Code-Generierung: inkrementelle Source Generators und Analyzers erstellen, Generator-Unit-Tests schreiben, externe Daten zur Compile-Zeit einlesen und C#-Interceptors implementieren — zur Eliminierung von Boilerplate und Verbesserung der Anwendungsperformance.
C# Source Generators
Dauer: 2 Tage
Zweitägiger Workshop zur Roslyn-basierten Compile-Time-Code-Generierung: inkrementelle Source Generators und Analyzers erstellen, Generator-Unit-Tests schreiben, externe Daten zur Compile-Zeit einlesen und C#-Interceptors implementieren — zur Eliminierung von Boilerplate und Verbesserung der Anwendungsperformance.
Zielgruppe
.NET-Entwickler, die Compile-Time-Code-Generierung einsetzen möchten, um Boilerplate zu eliminieren, Muster durchzusetzen und die Anwendungsperformance zu verbessern. Der Workshop richtet sich an Entwickler, die Frameworks, Bibliotheken oder umfangreiche Anwendungen erstellen, bei denen wiederkehrende Code-Muster eine Wartungslast darstellen.
Voraussetzungen
- Fundierte Kenntnisse in C# und .NET (C# 10+ empfohlen)
- Grundkenntnisse der Roslyn Compiler API sind hilfreich, aber nicht erforderlich
- Visual Studio 2022/2026 oder Rider mit installiertem .NET 10 SDK
Lernziele
Nach Abschluss dieses Workshops werden die Teilnehmer in der Lage sein:
- Zu verstehen, was Source Generators sind, wie sie in die Roslyn-Kompilierungspipeline integriert sind und wann sie gegenüber Alternativen wie Reflection oder T4-Templates vorzuziehen sind
- Vorhandene Source Generators aus NuGet-Paketen zu konsumieren und in einem Projekt zu konfigurieren
- Inkrementelle Source Generators mit der
IIncrementalGenerator-API von Grund auf zu erstellen - Unit Tests für Source Generators mit den
Microsoft.CodeAnalysis.Testing-Bibliotheken zu schreiben - Externe Daten (XML, JSON) zur Compile-Zeit zu lesen, um die Code-Generierung zu steuern
- C# Interceptors zu implementieren, um Methodenaufrufe zur Compile-Zeit zu ersetzen, ohne vorhandenen Quellcode zu ändern
- Performance-Best-Practices anzuwenden: inkrementelle Pipelines, Caching, Diagnose-Reporting und Vermeidung unnötiger Neugenerierung
Kursinhalt
- Foundations and architecture
- Implementation patterns and best practices
- Integration, testing, and deployment
Erweiterte Lernpfade
- Roslyn-Analyzer und Code Fixes: Generatoren mit Diagnosen kombinieren, die Entwickler zu generierten APIs leiten
Scriban- undT4-artige Templates innerhalb von Generatoren für komplexe Multi-File-Ausgaben- Integration mit
Verify.SourceGeneratorsfür Golden-File-Snapshot-Tests - Source Generators in Blazor und MAUI einsetzen: Compile-Time-Routen-Generierung und plattformspezifischer Code
Praktische Übungen
- Die Ausgabe der Source Generators
System.Text.JsonundMicrosoft.Extensions.Loggingin einem bestehenden Projekt konsumieren und inspizieren. - Einen inkrementellen
[GenerateDto]-Generator erstellen, der DTO-Records aus annotierten Domain-Klassen emittiert. - Eine vollständige Unit-Test-Suite mit
Microsoft.CodeAnalysis.CSharp.Testingschreiben: Happy Path, Diagnosen und No-Output-Fälle. - Einen Generator erstellen, der eine
api-schema.xml-AdditionalFile parst und eine stark typisierte HTTP-Client-Klasse mit XML-Dokumentationskommentaren emittiert. - Einen C#-Interceptor-Generator implementieren, der Reflection-basierte Methodenaufrufe durch generierte, Zero-Allocation-Äquivalente ersetzt.
- Eine inkrementelle Generator-Pipeline profilieren und optimieren:
IEquatable<T>zu Modell-Typen hinzufügen, Caching-Verhalten verifizieren und Build-Zeit-Verbesserung messen. - Den fertigen Generator als NuGet-Paket mit korrektem
buildTransitive-Layout verpacken und aus einem separaten Consumer-Projekt testen.
Ergebnisse
- In der Lage, zu beurteilen, wann Source Generators das richtige Werkzeug sind, und die Abwägungen gegenüber Reflection, T4 und IL-Weaving zu erläutern
- Versiert in der Implementierung von
IIncrementalGeneratormit korrekt strukturierten, cache-freundlichen Pipelines - Kompetent im Testen von Generatoren mit
Microsoft.CodeAnalysis.CSharp.Testinginklusive Diagnose- und No-Output-Assertions - Fähig, Code-Generierung aus externen XML- und JSON-Schema-Dateien über
AdditionalFileszu steuern - Erfahren im Schreiben von C#-Interceptors, um Aufrufstellen zur Compile-Zeit transparent zu ersetzen
- In der Lage, Generator-Pipelines für Build-Performance mit
IEquatable<T>,WithTrackingNameund gestuften Transforms zu optimieren - Bereit, Generatoren als NuGet-Pakete mit korrektem Multi-Targeting und Asset-Layout auszuliefern