In my mind, what you called the "resolver routine" is the best solution. Since your assembly is loaded into the default context, the search paths contains the client application current folder, not the folder of the assembly. Rearding this article, this is a typical case for using AppDomain.AssemblyResolve event. I guess you can either load your assembly into a custom context but it sounds a bit too much to me (just my two cents)
I hope this helps