As you likely already know, assemblies are found relative to the .exe and the instructions in its .exe.config file. That means your .dll will have to take care of loading its assemblies "by hand".
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveLocally);
static Assembly ResolveLocally(object sender, ResolveEventArgs args)
{
string path = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
new AssemblyName(args.Name).Name + ".dll"
);
if (!File.Exists(path))
{
return null;
}
return Assembly.LoadFrom(path);
}
This is basically the same as here: How to add folder to assembly search path at runtime in .NET?