The CLR looks in only two places by default for an assembly: the GAC first, the directory from which the EXE was started second. Getting it to look elsewhere requires extra work. One possibility is off the table, you cannot subscribe an event handler for AppDomain.AssemblyResolve in this scenario. Which leaves an app.exe.config file with the <probing>
or <codebase>
elements. You must give it the same name as the unmanaged EXE and store it in the same folder as the EXE.
This tends to be unwise if the EXE is not yours and doesn't exactly address the goal of keeping stuff out of the EXE directory. The GAC is the simple workaround.