AppData is good location). Also note that you have to write the bytes each time, you cant load from location just 'cos the dll already resides there. For managed dlls, you need not write bytes, but directly load from the location of the dll, or. Here, it belkin bluetooth f8t012 software can embed the required dependencies as resources to your main exe. You can do all this manually not needing to worry if assembly is managed or in mixed mode by embedding dll to your resources and then relying on AppDomain's Assembly ResolveHandler. This is a one stop solution by adopting the worst case, ie assemblies with unmanaged code. static void Main semblyResolve (sender, args) string assemblyName new AssemblyName(me; if (sources return null; string dllName assemblyName ".dll string dllFullPath mbine(GetMyApplicationSpecificPath dllName using (Stream s tManifestResourceStream(typeof(Program).Namespace ".Resources." dllName) byte. Like this or so: using (Stream s tManifestResourceStream(typeof(Program).Namespace ".Resources." dllName) byte data new bytestream. Length; ad(data, 0, data. Length return Assembly. Load(data /or just return Assembly. LoadFrom(dllFullPath /if location is known. If the assembly is fully unmanaged, you can see this link or this as. Eazfuscator, and also.Netz both of which are free. Paid apps include. BoxedApp and SmartAssembly. If you have to merge assemblies with unmanaged code, I would suggest. SmartAssembly. I never had hiccups with. SmartAssembly but with all others. Everything else is taken care of. public App semblyResolve new ResolveEventHandler(CurrentDomain_AssemblyResolve sembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) string dllName ntains? bstring(0, dexOf : place.dll dllName place. if (dllName. EndsWith resources return null; sourceManager rm new mespace "sources tExecutingAssembly byte bytes (byte)tObject(dllName return sembly. To avoid chicken and egg problem, you have to ensure you declare the handler before accessing assembly and that you do not access the assembly members (or instantiate anything that has to deal with the assembly) inside the loading (assembly resolving) part. ILMerge can combine assemblies to one single assembly provided the assembly has only managed code. You can use the commandline app, or add reference to the exe and programmatically merge. For a GUI version there is. I have a DLL System. Data.SQLite. dll To use it in a normal way just add it as reference and using System. Data.SQLite; then, I can use all the functions inside this DLL. Length) 0) ms. Write(buffer, 0, read ba Array Assembly sSQLiteDLL Assembly. Load(ba but, how am I going to use the functions in SQLiteDLL? I also tried add the DLL as resource in properties and load it like this: public Form1 semblyResolve new ResolveEventHandler(CurrentDomain_AssemblyResolve InitializeComponent sembly. Length; ad(data, 0, data. Length /or just byte data new BinaryReader(s).ReadBytes(int)s.Length File. WriteAllBytes(dllFullPath, data return Assembly. LoadFrom(dllFullPath ; The key here is to write the bytes to a file and load from its location. Thanks.