or
Jeffrey Richter resource load
For ease of use and if you don't want to modify existing code then use ILMerge. Otherwise use the code reflection method.
Method 1:
Note: ILMerge is not able to merge WPF assemblies.
ilmerge /target:winexe /out:SelfContainedProgram.exe
Program.exe ClassLibrary1.dll ClassLibrary2.dll
Method 2:
Embed DLLs as resources using Visual Studio, then add code,
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";
using (var stream =
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
TIP: make sure registering the callback comes before everything
TIP: make sure the resource name is correct, esp. if its in a folder
There's a lot of information out there, let me know if I missed anything.
References
http://www.codeproject.com/Articles/9364/Merging-NET-assemblies-using-ILMerge
http://www.digitallycreated.net/Blog/61/combining-multiple-assemblies-into-a-single-exe-for-a-wpf-application