Unity内部编译器错误与自定义DLL

时间:2014-03-13 17:27:56

标签: c# c++ plugins dll unity3d

我花了几个小时尝试在网上找到的解决方案,但没有任何工作,所以这里是我对Stackoverflowers的问题。

我为Unity制作了一个小插件,并将dll导入我的项目文件夹。当我在编辑器中启动游戏时它工作正常,但如果我尝试编译,我会得到以下内容:

Internal compiler error. See the console log for more information. output was:
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.

  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool)

  at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 

  at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 

  at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 

  at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 

  at Mono.CSharp.Driver.LoadReferences () [0x00000] in <filename unknown>:0 

  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 

  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 

到目前为止我做了什么:

  • 我的dll位于Assets
  • 中的Plugins文件夹中
  • 尝试将dll(也)放在项目根目录
  • 尝试使用和不使用命名空间
  • 在Unity中设置.NET 2.0

顺便说一句,它在Unity编辑器中工作正常,所以我应该非常清楚我按照官方插件制作指南中的说明做了正确的。

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

当我从插件文件夹中删除dll,同时只在项目的根文件夹中保留了它的副本时,就可以了

因此,在这种情况下,解决方案是将dll保留在项目的根文件夹中,而不是其他地方。

我不确定为什么,所以问题的一部分仍然是开放的。

答案 1 :(得分:1)

对我来说有用的是将目标平台设置得更低(从4.5到3.5)。 正如这里建议的: http://forum.unity3d.com/threads/ideas-reflectiontypeloadexception-the-classes-in-the-module-cannot-be-loaded.230389/

答案 2 :(得分:1)

我需要做的是将API兼容级别从.NET Subset 2.0更改为.NET 2.0。突然一切都很好。可能线程任务正在做一些问题。

请参阅reference

答案 3 :(得分:0)

您想在什么平台上编译脚本?

如果你正在为iOS做这件事,请确保你没有在DLL中声明任何事件。

我遇到了这个问题,最后我把它们删除了。