2016-08-26 43 views
0

我目前的工作,以減少從Unity可我刪除System.Windows.Forms.dll的通過protobuf網

從Unity編輯日誌產生的APK的最終版本大小引用,我發現了一些不必要的DLL文件。最大的一個是System.Windows.Forms.dll, referenced by protobuf-net`。

的層次是:protobuf-net -> System.ServiceModel -> System.Messaging -> System.Windows.Forms

爲什麼protobuf網參考Windows特定的程序集?

我該如何刪除它?

回答

3

首先,System.Windows.Forms實際上並不是Windows在Unity中的具體情況。 Unity在後臺使用Mono(微軟.NET Framework的開源實現),它完全跨平臺。這個DLL的名字是System.Windows.Forms只是爲了保持Mono與微軟的.NET Framework實現兼容。

如果您有興趣,請點擊這裏Mono's WinForms implementation的更多信息。

Protobuf-net在內部使用System.Messaging,這意味着System.Windows.Forms也將包括在內。在查看Mono的System.Messaging實現的源代碼時,我在MessageQueue.resxMessage.resx中看到至少兩處引用System.Windows.Forms

同樣在Mono的System.Messaging的makefile文件,你可以看到下面的代碼:

ifdef NO_WINFORMS_DEPENDENCY 
LIB_MCS_FLAGS += -d:NO_WINFORMS_DEPENDENCY 
else 
LIB_REFS += System.Windows.Forms 
endif 

概括起來講,我不認爲你可以擺脫組裝。我並不是很熟悉Unity,但是看看protobuf-net和Mono的來源,你需要建立你自己的版本或者做一些魔術來擺脫它。

編輯:我不知道Unity是否有某種內置的鏈接或裝配剝離機制?例如,在構建一個Android應用程序時,我可以使用一個鏈接器,它從我正在使用的程序集中去掉所有未使用的方法,類和其他東西。在你的情況下,只有protobuf-net使用的System.Windows.Forms組件的小子集將被留下。

編輯2:This可能是要看的東西,即使它是iOS特定的。

+0

感謝您的評論!,我會檢查protobuf網源代碼。 – zone1020