References to a project are stored within the .vbproj (.csproj) file, not the .sln file. The solution is just a grouping of projects that you want to work on at the same time. So, when you add a reference from one project to another and the referencing project belongs to more than one solution, it's going to expect that the referenced project belong to the solution no matter what solution it's in. So, if projA -> projB (-> means references) and projA belongs to SlnA and SlnB, then projB will need to belong to both solutions. Now, what I said pertains to referencing the projects, not referencing the DLLs. If you reference the DLL, it doesn't matter what solution the referenced project belongs to. Now, when you reference DLLs, you'll have a few issues (especially if you have the assemblies stored in the GAC). First off, when you debug a solution, it locks open the .pdb files for the references, so you'll need to close the referencing solution before you try to modify and build the referenced solution. Secondly, if you change the referenced solution, you have to rebuild it before the changes will be visible in the referencing solution; so none of the adding a new method to projA and having it immediatly visible in projB without rebuilding A first.
Hopefully that answers your questions.