I understand you want control over the code, but I'd just like to point out what another dev has done in a similar situation.
Dwarf Fortress is a similarly complex game made mostly by one guy, Tarn Adams. He protects his game with licensing, not code obfuscation. He also allows some pretty serious modding, but hasn't actually endorsed most of it. I don't fully understand it, but DFHack is a very popular utility that allows third-party scripts to access Dwarf Fortress's RAM. This utility allows the player to use tons of scripts that drastically improve their quality of life. A few examples include quicker bugfixes, mouse support, even 3D graphics.
I am totally fine with it if you don't want other people toying with your code, but just know that other games with similar communities have greatly benefited from openness.
I'm a minor participant in the DFHack project. Dwarf Fortress is in C++, which makes it
much harder to decompile than something written in C#. Tarn takes no specific steps to obfuscate his code because he doesn't have to: it's compiled to native machine code, and with modern compilers, that makes it essentially fully obfuscated by default. We can't even reliably identify classes that don't have virtual methods. Even identifying function boundaries in the compiled machine code is challenging, due to inlining. Despite all that, DFHack exists. Tarn seems to tolerate us fairly well. We've done a lot to help with this by being persistently respectful of his efforts and by providing useful feedback about the bugs we find in the course of our explorations.
C# code (when compiled to the CIL, at least, which is the default) is frankly trivial to decompile. About all you can do is obfuscate variable names. With baseline obfuscation, all (or essentially all) of the classes and methods you define in your source will be recoverable from the compiled code; all that will be lost is the names you gave them (and possibly also any code the compiler has identified as dead). This is, essentially, the same obfuscation that Mojang uses to obfuscate Minecraft. The thousands of mods that exist for Minecraft should tell you how successful that has been.
Some of the . NET obfuscators do things to your code that make it harder to decompile (with varying degrees of success), but also make it slower. But all of these methods are reversible, and frankly none of them is more difficult to reverse than the "obfuscation" that compiling C++ to machine language does.
It is essentially impossible to stop people from modding a managed . NET executable. However, at the same time, it's unlikely that the people who do such modding will be dicks about it. However, the fact that decompiling C# is much easier than decompiling C++ does suggest that the probability of at least one asshole modder popping up is somewhat higher than it is for the C++ case exemplified by Dwarf Fortress.