You can also build your own .NET frameworks like ASP.NET or Entity Framework using reflection and expressions. All the tools that these frameworks use to analyze the structure of your code and dynamically compile new code are part of .NET. It's not as DSL friendly as something like Racket, but you can generally get your own DSL based on class, expression, and attribute analysis up and running if you put some time in. The .NET rabbit hole goes quite deep.