I have experienced usual problems getting "unmanaged" (or better - real) programs compiled with Visual Studio 2005 to run. That's how I discovered the joy of side-by-side Assemblies.
I have not found much information on side-by-side Assembiles in my computer books so I did some googling on the subject today.
The subject turns out to be highly controversial. Some developers advice against it, as it makes it even harder to know what dll's your program is actually loading, something that can make you waste even more time troubleshooting the problem. On the other hand - I am dead tired of all the problems caused by common dlls like mysql, zlib, openssl - things that are used (and put right into the path) by numerous applications. So then, when my application tries to stert, it loads the wrong dll (from the path injected (infected) by some other program) and fails. What I want to do is to install all these dll's as side-by-side Assemblies, and use a manifeat in my app to make sure that it loads the correct version. In other words - a fine job for WarInstall. But in order for the installer to automate this process - I need to understand how all this sh* works.
I found several interesting articles on the subject. The best one was a free workshop ".NET Fusion" by Richard Grimes . (See the link below).