I think every one should read this thread on gotDotNet message board about too many DLLs.
"Try grouping things by application type/usage. Keep in mind that there is an issue when creating circular references. If DLL A references DLL B, DLL B can't reference DLL A because it would create a circular dependency. This means that you will want to carefully plan which classes go into which DLL's/class libraries. This is an artifact of assembly metadata. Circular references are possible in code using reflection. ".
Visual Studio does not allow adding circular dependencies if you have all your projects in a single solution and add refrence to projects.
While it's true that circular references should be avoided and indicate questionable design, it should be mentioned that this is not always feasible or possible. Real life can get ugly. I don't have much idea when in real life we will have to use circular dependency. If some one can help me understand and let me know in what circumstances we should allow circular dependencies and what precautions should be taken in these cases it would be a great knowledge for me.