• Unity3D引用dll打包(bāo)發布的問題(tí)及解決(jué)

    2018/9/12      點擊:

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

    一(yī).問題(tí)出現

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

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

    接著,我再猜測可能是StriveEngine.dll編譯時選擇平(píng)台(tái)的問題,於是把(bǎ)目標平台(tái)由anycpu更改為x86,重(chóng)新生成StriveEngine.dll,並且在u3d打包發(fā)布(bù)也選擇x86。

    二.解決方(fāng)案

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

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

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

    三.又現困境

    由(yóu)於我們的遊戲會打算發布一個輕量級的Web版(bǎn)本,於是,我們嚐試將其打包發(fā)布為(wéi)Web版,god,同樣的(de)問題又出現了,而且,在發布Web版(bǎn)本的情況下,Api Compatibility Level是不可選擇的(de)。 

    猜測發(fā)布Web版本隻能(néng)使用(yòng).Net 2.0 Subset。

    四(sì).如何(hé)走出困境?

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

    91影视免费版下载-91麻豆国产福利精品-91麻豆精品一二三区在线-国产91系列视频在线观看