首先,因為我是用到了.Net WinForm中的中的一個System.Windows.WinForms中的類(OpenFileDialog)就是打開就是選擇資源的一個對話框。ALT + Enter可以直接在VS中引用,但是在Unity 編輯器下就會提示如下提示 但是這還好,最起碼最終還是可以彈出資源 ...
首先,因為我是用到了.Net WinForm中的中的一個System.Windows.WinForms中的類(OpenFileDialog)就是打開就是選擇資源的一個對話框。ALT + Enter可以直接在VS中引用,但是在Unity 編輯器下就會提示如下提示
但是這還好,最起碼最終還是可以彈出資源對話框的。
如下
一切正常,可以選中資源文件。
有一個方法可以不彈出這個提示框。找到System.Windows.WinForms.dll動態庫,把這個庫文件放在工程文件的根目錄,就不會有這個提示了。
以上就是在Unity Editer下的測試結果,看是一切正常了。
下麵開始打包Windows程式包
打包一切正常,運行一切正常,執行....................沒有任何反應,在程式裡加入try catch發現報錯了,錯誤信息:Operation is not supported on this platform.
斃了狗啊。。。。。
後面在網上查了好久,發現有兩種方法,我整理了一下:
- 找到System.Windows.WinForms.dll庫文件,把他複製到Unity的安裝目錄(我的目錄為:Editor\2018.3.0f2\Editor\Data\Mono\lib\mono\2.0\)這裡面可能已經存在一個相同的庫文件了,可以把它備份一份出來後覆蓋他。
Unity編輯器設置.Net Standard 2.0
打包。。。。。打包沒問題,但是還是會有(Operation is not supported on this platform.)這個異常提示
2. 在Unity的資源根目錄創建一個 plugins的文件夾,將System.Windows.WinForms.dll庫文件複製到這個文件夾中,其實我到這一步編輯器就已經爆紅了。。。。。。顯然也不正確。
下麵說一下打包後成功的方法
其實官方文檔中有這一部分介紹 Unity官方解釋:Unity - 手動:引用其他類庫程式集 (unity3d.com)
大概意思就是:Unity使用.Net 4.x版本時會引用一小部分的程式集
如:
- mscorlib.dll
- System.dll
- System.Core.dll
- System.Runtime.Serialization.dll
- System.Xml.dll
- System.Xml.Linq.dll
但是我們使用的不在這裡,雖然在VS中可以直接ALT+Enter引用,但是Unity這邊找不到。如果想讓Unity找到並鏈接到這個dll庫,就需要告訴Unity你要鏈接哪個DLL庫。
csc.rsp 添加一個這個文件和DLL庫文件就可以解決。
詳細步驟,其實很簡單,就2步。
第1步:在Assets目錄下創建一個csc.rsp文件
第2步:在文件中輸入
-r:System.Windows.WinForms.dll
完成。
記住,要使用.Net 4.x
打包測試,沒問題。
-
最後再說一點,很坑。就是如果最開始先設置的是 .Net 4.x ,然後再新建的csc.rsp文件和添加庫文件。此時還沒編譯就會報錯
我猜測可能是要先添加csc.rsp文件與和在裡面添加-r:XXX.XXX.XXX.dll,然後再切換到.Net 4.x Unity編輯器會重新去載入csc這裡文件里的庫的配置信息。如果最開始就切換到了4.x再重新切換一下就好了。