Generators are a bit awkward, but definitely workable and essential to the viability of native AOT.
More generally, the fact that the C# compiler is implemented as library with easy support for runtime code generation is also a powerful feature that I've found to be incredibly useful in a variety of expected and unexpected ways.