Unable to find type or namespace of imported DLL

2019-03-04 15:57发布

问题:

I downloaded the "smilenet-1.2.1-win64-academic" library from this page and imported the smileNET.dll in my Unity project. Then I restarted my visual studio, and when I tried to use the library, it gave me an error that the type or namespace could not be found. I tried using Smile; and using smileNET; as indicated in their documentation file Hello.cs but it did not work. I tried 64 bit version as well as 32 bit one. My unity version is 2018.1.8f1 64bit

When I inspected the downloaded dll, it said that the >NET version is v4.0.30319 while my VS2017 is running version 4.7.03056, could that be a problem?

Various things that I have tried:

  1. I also tried manually adding references. The option to add references was not appearing, so I clicked on Project>Referneces>Analyzers as shown below and then in the top menu clicked on Project>Add References and then added the smileNET.dll file. Doing so fixed the error (temporarily). When I closed my VS it asked me if I want to save the changes to Chem-o-Crypt.sln Assesmbly-CSharp*, so I said yes (although I doubt if it was really saved). But when I restarted my Visual Studio, I found that the reference was gone, and error popped up again. meh :/

  1. Also tried enabling compiling of unsafe code (just in case) as shown in the Unity documentation, but did not work either.

  1. I have another folder (Chem-o-Crypt/Assets/bayesserver-8.3/DotNet/Standard20/) which contains several other dlls that are working fine, so I pasted my dll there and it did not work.
  2. I have literally tried adding this dll in Chem-o-Crypt/, Chem-o-Crypt/Plugins, Chem-o-Crypt/Assets, Chem-o-Crypt/Assets/Plugins and what not, but it seems to be adamant and not working.
  3. Copied the 64 bit version of dll in Chem-o-Crypt\Assets\Plugins\x64 and 32 bit version in Chem-o-Crypt\Assets\Plugins\x86 which did not work either.
  4. Copied the dll at the root level of the Unity editor (e.g. C:\Program Files\Unity\Editor)
  5. This person was getting the same error as mine. Skip to time 15:21 to see, but I am not able to use his solution as the things in my project explorer are appearing differently. Basically the dll is not showing up there, just like it did for him.

回答1:

I download the dll, unfortunately this is a mixed assembly, see the picture, which is not supported by Unity.

Then some workaround can be:

  • Build and use native plugins

  • Create another C# program using smileNET.dll and communicate with Unity program.