Look into IL Merge. This utility allows you to combine multiple .NET assemblies into a single assembly.
I quote:
ILMerge is a utility that can be used to merge multiple .NET assemblies into a single assembly. ILMerge takes a set of input assemblies and merges them into one target assembly. The first assembly in the list of input assemblies is the primary assembly. When the primary assembly is an executable, then the target assembly is created as an executable with the same entry point as the primary assembly. Also, if the primary assembly has a strong name, and a .snk file is provided, then the target assembly is re-signed with the specified key so that it also has a strong name.
Something to take into consideration however, is that people can still use the created assembly. Look into obfuscation and licensing to keep the easy-going at bay, but remember that if someone wants your code badly enough they will get it.
Certain things make it a lot harder, such as having a Web Service, but even then this is not full proof.