今年咱们开始使用Unity3D开发MMORPG,脚本语言使用C#,这样咱们就能够使用以往积累的许多类库。可是,在U3D中使用.NET dll的过程并非那么顺利,好比咱们今天遇到的这种问题。ui
一.问题出现加密
咱们在当前的一个U3D项目中使用了StriveEngine做为通讯组件与服务端进行通讯,在U3D环境中,编译运行一切正常,但在打包发布(Build)为PC版本可执行文件时,却出现错误:“ArgumentException: The Assembly System.Management is referenced by StriveEngine. But the dll is not allowed to be included or could not be found.”spa
最初,我觉得是签名或者是加密混淆的问题,因而我使用原始编译生成的StriveEngine.dll,问题同样存在。3d
接着,我再猜想多是StriveEngine.dll编译时选择平台的问题,因而把目标平台由anycpu更改成x86,从新生成StriveEngine.dll,而且在u3d打包发布也选择x86,以下图所示:blog
可是,问题依然存在。游戏
二.解决方案开发
通过一番折腾,终于发现须要设置一下U3D所使用的.NET版本 -- 点击Player Settings按钮,找到Api Compatibility Level选项,选择".Net 2.0",而非".Net 2.0 Subset",以下图所示:get
这个选项的意思是说,要使用.NET 2.0的完整版本,而非其子集。通过此设置,终于能够打包发布成功。it
究其缘由,看来是由于StriveEngine所使用的是完整版本.NET 2.0。io
三.又现困境
因为咱们的游戏会打算发布一个轻量级的Web版本,因而,咱们尝试将其打包发布为Web版,god,一样的问题又出现了,并且,在发布Web版本的状况下,Api Compatibility Level是不可选择的。
猜想发布Web版本只能使用.Net 2.0 Subset。
四.如何走出困境?
若是发布Web版本就只能使用.Net 2.0 Subset这个猜测是正确的,那么,我想基于.Net 2.0 Subset开发一个StriveEngine.U3D.dll,使其能够被打包发布到各类不通类型的平台。但是,.Net 2.0 Subset 具体指的是哪一个子集了?是.NET Compact Framework?仍是SilverLight提供的.NET Framework?抑或是其它?望知道的童鞋能留言告诉一下。