Multiple versions of a dll are handled through the GAC. Basically, what happens is when an assembly calls a dll that's in the cache, it also tells the system what version of the dll it wants.
There can be multiple versions of the same named dll within the Assembly folder (IMS, it's \windows\system\assembly). The version number provides the uniqueness and gives the OS the ability to seperate them.
When you add a reference to an assembly from within your project, it'll mark the current version that's on your system as what it wants. If the system can find that version or newer, then it will load it. If not, then it will give you an error.
im in ur stakz, overflowin ur heapz!