C# has AOT compilation which creates a single, native binary. This has gotten so much better with .NET 10 and since the introduction of source generators to deal with reflection issues.
Also, check out nanoFramework for a .NET runtime that can run on MCUs like the ESP32 [1]