I wanted to distribute the desktop client I made for https://cryptabyte.com/ as a single .exe, without any install or additional DLL’s. I used ILMerge, a tool from Microsoft Research to merge all the assemblies into one DLL. (If you have the .Net 4.5 beta installed like me, read this to target .Net 4.0.) I merged the assemblies with ILMerge:
ILMerge.exe /target:CryptAByte /out:Crypt.exe /targetplatform:"v4,C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0" CryptAByte.exe CryptAByte.CryptoLibrary.dll CryptAByte.Domain.dll Ionic.Zip.dll
ILMerge has the added benefit of making the merged DLL slightly smaller that than the sum of its parts.
I wanted my app to run on OS X too. After I stripped out the Entity Framework Code First data annotations from my data structures, it compiled and ran smoothly on OS X:
Actually, that doesn’t look very good at all. The Mono WinForms color scheme has some kind of sickly yellow tinge to it. I want to distribute this without requiring Mono to be installed, so I used macpack:
macpack -m:2 -o:. -r:/Library/Frameworks/Mono.framework/Versions/Current/lib/ CryptAByte.Domain.dll CryptAByte.CryptoLibrary.dll Ionic.Zip.dll -n:CryptAByte -a:CryptAByte.exe
The resulting .app was over 300MB! Looks like I’m going to have to write a native client for OS X.