2016-08-26 2 views
0

ich aktuell referenzierte entfernen bin arbeiten, um die endgültigen Build Größe eines APK von UnityKann ich System.Windows.Forms.dll von protobuf-net

Vom Unity Editor Log produziert zu reduzieren, fand ich einige unnötige DLL Dateien. Der größte ist System.Windows.Forms.dll, referenced by protobuf-net`.

Die Hierarchie ist: protobuf-net -> System.ServiceModel -> System.Messaging -> System.Windows.Forms

Warum protobuf-net Referenzfenster spezifische Montage?

Wie kann ich das entfernen?

Antwort

3

Zunächst ist System.Windows.Forms in Unity nicht wirklich Windows-spezifisch. Unity verwendet Mono (Open-Source-Implementierung von Microsoft .NET Framework) im Hintergrund und ist vollständig plattformübergreifend. Der Name der DLL ist System.Windows.Forms, nur um Mono mit Microsoft .NET Framework-Implementierung kompatibel zu halten.

Hier finden Sie weitere Informationen über Mono's WinForms implementation, wenn Sie interessiert sind.

Protobuf-net verwendet System.Messaging intern, was bedeutet, dass System.Windows.Forms ebenfalls enthalten ist. Betrachtet man den Quellcode von Mono's System.Messaging Implementierung, sehe ich mindestens zwei Referenzen zu System.Windows.Forms in MessageQueue.resx und Message.resx.

Auch in der Make-Datei von Monos System.Messaging, können Sie den folgenden Code zu sehen:

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

Um es zusammenzufassen, ich glaube nicht, Sie loszuwerden, die Montage bekommen. Ich bin mit Unity nicht wirklich vertraut, aber wenn ich mir die Quellen von sowohl protobuf-net als auch Mono anschaue, müsste man eigene Versionen erstellen oder etwas Magie anwenden, um es loszuwerden.

Edit: Ich frage mich, ob Unity eine Art von Verknüpfung oder Montage Stripping-Mechanismus eingebaut hat? Zum Beispiel kann ich beim Erstellen einer Android-Anwendung einen Linker verwenden, der alle nicht verwendeten Methoden, Klassen und andere Dinge aus den von mir verwendeten Assemblies entfernt. In Ihrem Fall wäre nur die kleine Teilmenge von System.Windows.Forms Assembly, die protobuf-net verwendet, übrig.

Edit 2:This könnte etwas zu untersuchen sein, obwohl es iOS-spezifisch ist.

+0

vielen dank für ihren kommentar!, Ich werde probobuf-net quellcode überprüfen. – zone1020

Verwandte Themen