It's quite trivial to get the source from a C# exe file in the same way as a decompiler makes it trivial to get the source from a C++ exe file.
Obfuscators are common if you're concerned about the symbols leaking.
If you don't include the .PDB debugging symbol files it's much the same as native binary code. The .NET virtual machine code is a little more expressive but is superficially similar to x86 native code.
In my opinion, if you're concerned about people reading your compiled machine code, the only solution is to run your app on a server and give users an API.
Obfuscators are common if you're concerned about the symbols leaking.
If you don't include the .PDB debugging symbol files it's much the same as native binary code. The .NET virtual machine code is a little more expressive but is superficially similar to x86 native code.
In my opinion, if you're concerned about people reading your compiled machine code, the only solution is to run your app on a server and give users an API.