How should I add references to additional Mono assemblies?

Unity is built on Mono. Mono includes a large and growing subset of .NET. Much of this subset is available out of the box with Unity, so I can do things like add "using System.Collections.Generic;" to my C# script and start using dictionaries and such.

However, if I add "using System.Data;" (for example) to my script, I get ...

error CS0234: The type or namespace name 'Data' does not exist in the namespace 'System'. Are you missing an assembly reference?

The same thing happens with many other common assemblies. Obviously Unity is giving me a useful set of assemblies, but not everything.

Looking in my Unity 3.1 installation folder, I can see all these DLL's sitting in Data\Mono\lib\mono\2.0, including System.Data.Dll.

I can get my compile error to go away by copying the DLL I want into my Assets\Plugins folder. Is this the correct and best way to add an additional reference? I would prefer something like Visual Studio's reference management -- does this exist with Unity? What if I'm going to build for different platforms, do I need different versions of the DLL's?

This seems like it would be a common question, but searching the docs, answers and forums hasn't turned up a definitive answer. Links appreciated if I overlooked something.

Try swapping to .NET 2.0 instead of .NET 2.0 Subset in the Player Settings panel for the Api Framework.

If that doesn't give you the ones you want, put the files anywhere except the plugins folder - it's not for managed dlls (Though they should work there, it'll duplicate them in builds, which isn't good for build size).

And if that doesn't work, the dll may just not be compatible