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.

more ▼

asked Jan 13, 2011 at 07:20 PM

avatar image

9.2k 62 195 167

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

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

more ▼

answered Jan 13, 2011 at 10:03 PM

avatar image

Mike 3
34.6k 28 156 319

Good info, thanks Mike. However ... changing to ".NET 2.0" didn't make any difference. As mentioned, the compile error goes away if I copy the DLL into my Assets folder. I won't use Plugins, thanks -- perhaps Plugins.NET would be a good convention. Is that really the best way to do this? Would be nice if Unity had an assembly selector for adding references. (Guess I can always write my own ... ;)

Jan 13, 2011 at 10:36 PM yoyo

Oh, sorry, I read the original message as it not compiling when you added them in there. At any rate, that's how you have to add in System.Data and the like, yes. Plugins.NET sounds fine (It's actually exactly what I use myself), just make sure you add your plugin selector to the wiki if you make one! ;)

Jan 13, 2011 at 11:11 PM Mike 3

This sounds much like a problem I have...except I am using System.Configuration and a Configuration object. Funny thing is that I have used "Assets->Sync MonoDevelop Project" to create a solution file. Both MonoDevelop and Visual Studion 2008 compilers have no problem finding the assembly and building. This seems like a bug/shortfall to me. At the very least, the Editor should allow use of the MonoDevelop Referance feature (i.e. add the reference in the Editor similar to MonoDevelop).

Jan 27, 2011 at 10:13 PM Jeff Kingsley

I had the same issue and it was resolved as mentioned by adding the assemblies in the Assets-folder.

Feb 26, 2012 at 12:07 AM Almund
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments



asked: Jan 13, 2011 at 07:20 PM

Seen: 20067 times

Last Updated: Feb 26, 2012 at 12:07 AM