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