You could use an obfuscator to mess your code up when you compile to make it harder for someone to decompile and make sense of...Do a Google for .NET obfuscator and you'll get plenty of hits. Some are free (Microsoft give one away) others cost. But if your serious about protecting your code this is one way of approaching this.
Alternatively you code do something akin to Application Service Provision where you host the functional components on your own URL as web services and sell people applications which use these functional components. That way you get to keep your source code to yourself while selling people a shell which utilises the functionality.
Rob
Every gun that is made, every warship launched, every rocket fired, signifies in the final sense a theft from those who hunger and are not fed, those who are cold and are not clothed - Eisenhower 1953