When releasing freeware, you do not pay a lot of attention to protecting your program of hackers, or spend a lot of time implementing an overly complicated registration/activation system. However, with the dawn of the .NET Framework and the inability to compile your code to native executables, your compiled program can be decompiled pretty easily.
Freeware does not mean open source in this matter, so coders at least try to keep people from stealing their code. What you get packaged with Visual Studio is Dotfuscator CE, which is said to be one of the better obfuscation tools. With delay signing your assemblies, obfuscating them, and then signing, you make sure that these assemblies stay intact. However, if you have a setup project in the same solution as your source code, building the setup will also re-build all your assemblies, thus destroying all the obfuscation-signing, and simple create new, unsigned, and not obfuscated assemblies.
Just a nice little thing considering the new “coder friendliness” and RAD strategies. Right now, I am working around that by adding all assemblies directly to the setup, instead of adding the project output files, which would have been simpler and easier to maintain. Oh well.