ILMerge is a utility that can be used to merge multiple .NET assemblies into a single Assembly. It is freely available for use from the Tools & Utilities page at the Microsoft .NET Framework Developer Center. Its license does allow commercial usage! If you have any problems using it, please get in touch. (mbarnett _at_ microsoft _dot_ com)
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.
ILMerge is packaged as a console application. But all of its functionality is also available programmatically. Note that Visual Studio 2005 does allow one to add an executable as a reference, so you can write a C# client that uses ILMerge as a library.
There are several options that control the behavior of ILMerge. See the documentation that comes with the tool for Details.
The current version is 2.0.7.1228 (created on 28 December 2007). NOTE: There is no longer a version of ILMerge that runs in the v1.1 runtime.
The v2.0 version of 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.
The v2 version of ILMerge was built with v2.0.50727 of the .NET Runtime. If you have an earlier version (e.g., Beta2 is v2.0.50215), then you need to use a config file: ILMerge.exe.config. (Use "Save As..." to save the file. If you copy it from the browser, I believe you will get some extraneous characters that the browser throws in.)
Currently, ILMerge works only on Windows-based platforms. It does not yet support Rotor or Mono.