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.
If you aren’t aware about Assemblies, do read this introduction article here
ILMerge is packaged as a console application. But all of its functionality is also available programmatically. There are several options that control the behavior of ILMerge. ILMerge runs in the v2.0 .NET Runtime, but it is also able to merge v1 or v1.1 assemblies. However it can merge PDB files only for v2 assemblies.
Download the ILMerge tool here [.msi format]
Currently, ILMerge works only on Windows-based platforms. It does not yet support Rotor or Mono. You can find more information about this tool here the ILMerge web site.
To read more on the Side-by-Side Assemblies and WinSxS folder, I would recommend you check this article which was written sometime ago!