The problem here is your application only loads A.dll
therefore that's the only DLL that's copied into the output directory so when A
attempts to access code from X
it fails because the app doesn't know where X
is therefore can't load it.
The easiest solution here would be to install the other "general" DLLs into the GAC. Or alternatively, just ship the "general" DLLs with your app because they won't be loaded unless you use A
anyway, although, they are unnecessary bloat on your install/app size if they aren't required.