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