我目前正在努力减少从Unity生成的APK的最终构建大小
从Unity Editor日志中,我发现了一些不必要的DLL文件。最大的一个是System.Windows.Forms.dll, referenced by
protobuf-net`。
层次结构为:protobuf-net -> System.ServiceModel -> System.Messaging -> System.Windows.Forms
为什么protobuf-net参考窗口特定的组装?
如何删除此内容?
答案 0 :(得分:3)
首先,在Unity的情况下,System.Windows.Forms
实际上不是Windows特定的。 Unity在后台使用Mono(Microsoft .NET Framework的开源实现),它完全是跨平台的。 dll的名称是System.Windows.Forms
,只是为了使Mono与Microsoft的.NET Framework实现兼容。
如果您有兴趣,可以参考以下有关Mono's WinForms implementation的更多信息。
Protobuf-net在内部使用System.Messaging
,这意味着还会包含System.Windows.Forms
。在查看Mono的System.Messaging
实现的源代码时,我在MessageQueue.resx和Message.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的。