For custom deployments I've always has to rely on post-build scripts to do it right (and, unfortunately, they're not as good as they are in C++).
Another thing I have done is to set up the projects so that the build output is in the same location for all projects (Respecting Debug & Release, of course), and then add the config files to their respective solutions and change the "Copy To Output" property of the config files to "Copy if Newer". This would ensure everything ended up in the same place, with the dependencies, and you wouldn't need a post-build script.