• 您的位置(zhì):首頁 > 新聞動態 > Unity3D

    Unity3D引用dll打包發布的問題(tí)及解決

    2018/9/12      點擊(jī):

    今(jīn)年我們開(kāi)始使用Unity3D開發MMORPG,腳本(běn)語言使用C#,這樣我們就可以使(shǐ)用以(yǐ)往積累的(de)許多類庫。但是,在(zài)U3D中使用.NET dll的過程並不是那麽順利,比如我們今天遇(yù)到的這種問題。

    一.問題出現

    我們在當前的一個U3D項(xiàng)目中使(shǐ)用了(le)StriveEngine作為(wéi)通信組件與服務端進行通信,在U3D環境中,編譯運行一切正常,但在打包發布(Build)為(wéi)PC版本可執行文件時,卻出現錯誤:“ArgumentException: The Assembly System.Management is referenced by StriveEngine. But the dll is not allowed to be included or could not be found.”

    初,我(wǒ)以為是簽名或者是加密混淆的問題,於是我使用原始編譯生成的StriveEngine.dll,問題(tí)一樣存在。

    接著,我再猜測可能是StriveEngine.dll編譯時選擇平台的問題,於(yú)是把目標平台由anycpu更改為x86,重新生成StriveEngine.dll,並且在u3d打包發(fā)布也選擇x86。

    二.解決方案

    經過一番折騰,終於發現需要設置一下U3D所使用的.NET版本 -- 點擊Player Settings按鈕(niǔ),找到Api Compatibility Level選項,選擇".Net 2.0",而非".Net 2.0 Subset",如下圖所示:

    這個選項(xiàng)的意思是(shì)說,要使用.NET 2.0的完整版本,而非其子集。經過此設置(zhì),終於可以打包發布成功。

    究其原因,看來是因為StriveEngine所使用的是完整(zhěng)版本.NET 2.0。

    三.又現困境

    由於(yú)我(wǒ)們的遊戲會打算發布一個(gè)輕(qīng)量級的Web版本,於是,我們嚐試將其打包發布為Web版,god,同樣的問題又出現了,而且,在發布Web版本的情況下,Api Compatibility Level是不可選擇的。 

    猜測發布(bù)Web版本隻能(néng)使用.Net 2.0 Subset。

    四.如(rú)何走出困境?

    如果發布Web版本就隻能使用.Net 2.0 Subset這個猜想是正確的,那麽,我想基於.Net 2.0 Subset開發(fā)一(yī)個StriveEngine.U3D.dll,使其可以被打包(bāo)發布到各種不通類型的平台(tái)。可是(shì),.Net 2.0 Subset 具體指的是哪個子集了?是.NET Compact Framework?還是(shì)SilverLight提供的.NET Framework?抑或是其它?

    91网站入口_91视频导航_91短视频在线_91视频在线免费观看