Unity3D引用dll打包發佈的問題及解決

今年咱們開始使用Unity3D開發MMORPG,腳本語言使用C#,這樣咱們就能夠使用以往積累的許多類庫。可是,在U3D中使用.NET dll的過程並非那麼順利,好比咱們今天遇到的這種問題。ui

一.問題出現加密

咱們在當前的一個U3D項目中使用了StriveEngine做爲通訊組件與服務端進行通訊,在U3D環境中,編譯運行一切正常,但在打包發佈(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.」spa

最初,我覺得是簽名或者是加密混淆的問題,因而我使用原始編譯生成的StriveEngine.dll,問題同樣存在。3d

接着,我再猜想多是StriveEngine.dll編譯時選擇平臺的問題,因而把目標平臺由anycpu更改成x86,從新生成StriveEngine.dll,而且在u3d打包發佈也選擇x86,以下圖所示:blog

    

可是,問題依然存在。遊戲

二.解決方案開發

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

    

這個選項的意思是說,要使用.NET 2.0的完整版本,而非其子集。通過此設置,終於能夠打包發佈成功。it

究其緣由,看來是由於StriveEngine所使用的是完整版本.NET 2.0。io

三.又現困境

因爲咱們的遊戲會打算髮佈一個輕量級的Web版本,因而,咱們嘗試將其打包發佈爲Web版,god,一樣的問題又出現了,並且,在發佈Web版本的狀況下,Api Compatibility Level是不可選擇的。

    

猜想發佈Web版本只能使用.Net 2.0 Subset。

四.如何走出困境?

若是發佈Web版本就只能使用.Net 2.0 Subset這個猜測是正確的,那麼,我想基於.Net 2.0 Subset開發一個StriveEngine.U3D.dll,使其能夠被打包發佈到各類不通類型的平臺。但是,.Net 2.0 Subset 具體指的是哪一個子集了?是.NET Compact Framework?仍是SilverLight提供的.NET Framework?抑或是其它?望知道的童鞋能留言告訴一下。

相關文章
相關標籤/搜索