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.
Answer by Mike 3
Jan 13, 2011 at 10:03 PM
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
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 ... ;)
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! ;)
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).
I had the same issue and it was resolved as mentioned by adding the assemblies in the Assets-folder.
Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.
The best place to ask and answer questions about development with Unity.
To help users navigate the site we have posted a site navigation guide.
If you are a new user to Unity Answers, check out our FAQ for more information.
Make sure to check out our Knowledge Base for commonly asked Unity questions.
If you are a moderator, see our Moderator Guidelines page.
We are making improvements to UA, see the list of changes.
Answers and Comments
2 People are following this question.
Moving file failed
Editor scripts into external assemblies? how?
Can I use .NET 4.5 assembly as external library?
C# dll "MissingMethodException" - Before first recompile
how to create a wrapper for C++ class libraries