8

我正在尝试在 Unity 项目中构建一个 REST 服务器,并且最初认为 Nancy 似乎是显而易见的选择。但是后来很多头疼,我仍然无法让 Nancy 在 Unity Mono 运行时中运行 - 我可以从 Xamarin 编译和运行,但是当我尝试使用该资产时,Unity 给了我相当无用的输出:

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 

我不能是唯一一个尝试过这样的事情的人,并且我希望在多个项目中使用它,所以有一些可重用的东西是高度优先的 - 有没有人成功实施过这样的事情,如果是的话,你能给我有什么指示吗?

我真的很想让 Nancy 工作,但另一种轻松嵌入 REST 服务器的方法同样有价值。

4

2 回答 2

0

根据Unity Answers 上的这个帖子,这是因为 Unity 使用的 .NET 子集不包含 System.Web,因此将 System.Web.dll v2.0.50727 复制到项目中解决了这个问题。

但是,如果内存可用,我记得 Unity 中的一个选项强制它使用完整的 .NET 2.0 运行时而不是子集,这也可能解决问题。我使用 Unity 已经有一段时间了,所以该选项可能已被删除。

编辑: 见这里它被称为“兼容性级别”。

编辑 2:它在播放器设置中

于 2014-05-11T09:22:27.957 回答
0

我从来没有设法让一个 http 服务器在统一客户端中运行,(接受的答案看起来是正确的,但我测试它为时已晚,如果它不起作用,请告诉我)似乎至少在统一 4单声道运行时的必要部分已被排除。unity 5 中的情况可能有所不同,我目前没有使用 unity,所以恐怕我不是最新的。

考虑到这一点,我选择的解决方案是一个带有外部服务器的监听 http 客户端 - 这工作得相当好,但是事情变得比必要的稍微复杂一些。

我后来听到的另一个解决方案是使用 Thrift 协议,在https://github.com/amilstead/unity3d-thrift-twisted有一个示例,应该足以开始使用,并且支持 Thrift语言种类繁多,习语与 http 的习语略有不同,但通常这可能更适合大多数需要嵌入式 http 服务器的情况。

于 2015-11-24T09:59:22.017 回答