Also make sure they can't create an instance of your main-form from another .exe. In .NET you can rename a .exe into a .dll and reference it from another .exe, then simply create an instance of the mainform, use a private member invoke to set a license key internally using reflection and then showing the form, viola, cracked. So use a separate startup class which contains your main function, which creates the internal main form, which is also sealed so they can't create a subclass from it.
You can automate the obfuscation in a simple .cmd file and use sn.exe to sign the assembly again. I do that too:
call vsvars32.bat
"C:\Program Files\Microsoft Visual Studio .NET 2003\PreEmptive Solutions\Dotfuscator Community Edition\dotfuscator.exe" /q obfuscate_exe.xml
echo re-signing obfuscated dlls
sn -R "C:\Myprojects\VS.NET Projects\LLBLGen Pro\Distribution\DemoVersion\Obfuscated\LLBLGenPro.exe" c:\myprojects\mystrongkey.key
copy /y "C:\Myprojects\VS.NET Projects\LLBLGen Pro\Distribution\DemoVersion\Obfuscated\LLBLGenPro.exe" "C:\Myprojects\VS.NET Projects\LLBLGen Pro\Distribution\DemoVersion\LLBLGenPro.exe"