Source generation — compile-time code generation using Roslyn analyzers.
Incremental source generator:
1[Generator]2public class HelloGenerator : IIncrementalGenerator3{4 public void Initialize(IncrementalGeneratorInitializationContext ctx)5 {6 var classes = ctx.SyntaxProvider7 .CreateSyntaxProvider(8 predicate: static (node, _) => IsTargetClass(node),9 transform: static (ctx, _) => GetClassInfo(ctx))10 .Where(static info => info is not null);1112 ctx.RegisterSourceOutput(classes, static (spc, info) =>13 {14 var source = GenerateHelloMethod(info);15 spc.AddSource($"{info.Name}.g.cs", source);16 });17 }18}
Built-in generators:
Benefits: