Global Assembly Cache
You cannot add references from the global assembly cache because it is strictly part of the run-time environment.
Custom Component
If you deploy or copy an application that contains a reference to a custom component registered in the global assembly cache, the component will not be deployed or copied with the application, regardless of the Copy Local setting.
Outputs of Another Project
You should avoid adding file references to outputs of another project in the same solution, because doing this may cause compilation errors. Instead, use the Projects tab of the Add Reference dialog box to create project-to-project references.
Registered COM DLL
If you want to add a reference to a registered COM DLL that contains an internal manifest, make sure that you unregister the DLL first. If you do not, Visual Studio adds the assembly reference as an ActiveX Component instead of as a native DLL.
EnvDTE namespaces
When you manually add a reference to any of the EnvDTE namespaces (EnvDTE, EnvDTE80, EnvDTE90, EnvDTE90a, or EnvDTE100), set the Embed Interop Types property of the reference to False in the Properties window. Setting this property to True can cause build issues because of certain EnvDTE properties that cannot be embedded.
Reference: MSDN - How to: Add or Remove References in Visual Studio