See the question and my original answer on StackOverflow

If you definitely want to secure something, go for C++, as in the .NET World there is a powerful deobfuscator named de4dot (see here: that deobfuscates what most obfuscators on the market produce, event the ones it does not explicitely know.

However, this will only raise the bar, as even in the c++ world, there are powerful tools also (IDA:

There are other solutions, like mixed code assemblies where you can have the part you want to hide in native code and the rest in managed. see here for more: Mixed (Native and Managed) Assemblies