php
css
c
xml
ajax
mysql
linux
android
objective-c
multithreading
flash
html5
perl
oracle
apache
mvc
api
postgresql
dom
This is what I do:
You can also add solution folder and add them there.
Typically, the structure of my projects looks like this (at a minimum):
projectname - trunk - src - lib - support - docs - releases
The trunk folder contains the copy of the source that I am working on right now. Also, there's a directory 'lib', which contains all the 3rd party assemblies that are referenced by my project. (I reference the assemblies at that position).
The 'releases' folder contains branches of the trunk. For instance, whe v1 is released, a branch is taken of the trunk so that I have a copy of the sourcecode and all its dependencies that is necessary to build version 1 of the application. (This is handy for bugfixes. Fix the bug in that branch, merge the fix to the trunk, rebuild that branch and you have a fixed v1 of your application).
All these things go into sourcecontrol. (Yes, the referenced assemblies as well). By doing so, it is very easy if another collegue has to work on the project as well. He just gets the latest version from source-control, and he (or she) has everyting in place in order to be able to compile / build).
(Note that this is also true if you use something like CruiseControl for continuous integration).
You should look at nuget. It's a package management extension for VS2010 designed exactly for what you want.
In the properties window of Visual Studio for the reference to the dll, there is a Property called 'Copy Local' - set this to true, and they'll be copied to your local project's bin directory
Do have a look at Tree Surgeon - Creates a development tree for a .NET project, which can be a good starting point and from there you can improvise.
Personally, I have a folder in my source control for 3rd party DLLs (with a folder for each company, organisation) and reference them from there.
These files are then available for all developers who download the source and can be updated easily.
To answer this properly you need to differentiate between the environment and working set.
Environment:
Working Set:
You need to decide into which category your component fits.
Take a look at NuGet (package manager for Visual Studio)...
NuGet is a Visual Studio extension that makes it easy to install and update open source libraries and tools in Visual Studio.
Then read this NuGet doc to get the crème de la crème:
Using NuGet without committing packages to source control