Linking to an assembly that links to another assembly that... yeah, it can be a problem. Fortunately there are lots of solutions:
The first solution is to copy all of the relevant assembly DLLs to the same folder as your executable, rather than have them sitting in a different location. When one of the assemblies is referenced for the first time .NET can find it easily. You can add a reference to the DLLs in your project and they'll be copied to your output folder when you build the project.
Second option is to add the folder where those DLLs live to your search path. There are a few places that .NET will look for assemblies, and adding to the search path (either at the OS level or during your program's startup) will help.
Third, and most versatile in some ways, is to write a handler for the event that is raised when .NET fails to locate an assembly and load it yourself. When .NET fails to load an assembly it raises an event that you can trap. Do a search on AssemblyResolve
here on Stack Overflow for lots and lots of examples of how to - and sometimes how not to - do this, or click here for the MSDN article.
@garthb has already covered off the final option I had for you, so I'll stop typing now :)