Unity3D引用dll打包發(fā)布的問(wèn)題及解決
今年我們開始使用Unity3D開發(fā)MMORPG,腳本語(yǔ)言使用C#,這樣我們就可以使用以往積累的許多類庫(kù)。但是,在U3D中使用.NET dll的過(guò)程并不是那么順利,比如我們今天遇到的這種問(wèn)題。
一.問(wèn)題出現(xiàn)
我們?cè)诋?dāng)前的一個(gè)U3D項(xiàng)目中使用了StriveEngine作為通信組件與服務(wù)端進(jìn)行通信,在U3D環(huán)境中,編譯運(yùn)行一切正常,但在打包發(fā)布(Build)為PC版本可執(zhí)行文件時(shí),卻出現(xiàn)錯(cuò)誤:“ArgumentException: The Assembly System.Management is referenced by StriveEngine. But the dll is not allowed to be included or could not be found.”
初,我以為是簽名或者是加密混淆的問(wèn)題,于是我使用原始編譯生成的StriveEngine.dll,問(wèn)題一樣存在。
接著,我再猜測(cè)可能是StriveEngine.dll編譯時(shí)選擇平臺(tái)的問(wèn)題,于是把目標(biāo)平臺(tái)由anycpu更改為x86,重新生成StriveEngine.dll,并且在u3d打包發(fā)布也選擇x86。
二.解決方案
經(jīng)過(guò)一番折騰,終于發(fā)現(xiàn)需要設(shè)置一下U3D所使用的.NET版本 -- 點(diǎn)擊Player Settings按鈕,找到Api Compatibility Level選項(xiàng),選擇".Net 2.0",而非".Net 2.0 Subset",如下圖所示:
這個(gè)選項(xiàng)的意思是說(shuō),要使用.NET 2.0的完整版本,而非其子集。經(jīng)過(guò)此設(shè)置,終于可以打包發(fā)布成功。
究其原因,看來(lái)是因?yàn)镾triveEngine所使用的是完整版本.NET 2.0。
三.又現(xiàn)困境
由于我們的游戲會(huì)打算發(fā)布一個(gè)輕量級(jí)的Web版本,于是,我們嘗試將其打包發(fā)布為Web版,god,同樣的問(wèn)題又出現(xiàn)了,而且,在發(fā)布Web版本的情況下,Api Compatibility Level是不可選擇的。
猜測(cè)發(fā)布Web版本只能使用.Net 2.0 Subset。
四.如何走出困境?
如果發(fā)布Web版本就只能使用.Net 2.0 Subset這個(gè)猜想是正確的,那么,我想基于.Net 2.0 Subset開發(fā)一個(gè)StriveEngine.U3D.dll,使其可以被打包發(fā)布到各種不通類型的平臺(tái)??墒?,.Net 2.0 Subset 具體指的是哪個(gè)子集了?是.NET Compact Framework?還是SilverLight提供的.NET Framework?抑或是其它?
- 上一篇:UNITY3D處理碰撞事件的封裝類 2018/9/22
- 下一篇:MotionBuilder綁定C3D動(dòng)作到模型身上 2018/9/6