I've used code obfuscation myself in a few projects and have not noticed any
problems. Obfuscation in .NET generally just renames your class and member
names so that anyone who trys to "decompile" your assemblies using a
System.Reflection-based utility will see your code basically exactly as you
have programmed it except it will be difficult to read becuase methods and
objects will have un-informative names like a.aa(a, b, c). This alone should
not effect how .NET's realtime IL compiler interprets your code into machine
language. In other words, obfuscation generally only modifies your assemblies
"meta-data" and not the actuall code data.
There is at least one exception that i can think of where obfuscation would
break your code. If your code actually uses System.Reflection to discover the
real names of classes and members, this would be a problem becuase at runtime
these names are different than what you coded them to be becuase of the
obfuscation renaming scheme.
A couple things you might want to try:
1) If you are using RemteSoft DotFuscator Community Edition that comes with
some versions of VS.NET, either try to get your hands on the retail version
of DotFuscator, or try another Obfuscator. I often use "Salamander" from
Remotesoft.
2) If you are cryptographically signing your assemblies using VS.NET's tools
(or linking to any assemblies that are signed), you should delay-sign the
assembly, compile, obfuscate, and finally sign the assembly with the .NET
command line tools.
3) If your obfuscator has an option for encrypting strings, turn that option
off.
4) Compile your assemblies in "Release" mode not in debug mode. As far as i
can imagine, .NET's realtime debugger uses Reflection of the assemblies
metadata to give you infomative messages about the types and members throwing
errors. If this is true, obfuscation could potentially "break" the debugger.
-Nate