Mike,
.NET executables are easily decompiled. So if there is valuable IP involved in your dotNET work, you can "obfuscate" to protect it. As the label suggests, obfuscation means that instead of decompiling to your elegant, readable code, your Assemblies decompile as an incomprehensible mess that will run correctly but can be almost impossible to understand.
Most obfuscation includes conversion of Names into meaningless gibberish. If your runtime evaluation then includes something that has been renamed, the effect is obvious. Most obfuscators allow you to specify Names that are not to be altered but you need to consider and design it in advance if there is any chance you need to protect your work.
Regards
j.R
"... They ne'er cared for us
yet: suffer us to famish, and their store-houses
crammed with grain; make edicts for usury, to
support usurers; repeal daily any wholesome act
established against the rich, and provide more
piercing statutes daily, to chain up and restrain
the poor. If the wars eat us not up, they will; and
there's all the love they bear us."
-- Shakespeare: Coriolanus, Act 1, scene 1