我可以删除protobuf-net引用的System.Windows.Forms.dll

时间:2016-08-26 08:30:11

标签: c# unity3d mono protobuf-net

我目前正在努力减少从Unity生成的APK的最终构建大小

从Unity Editor日志中,我发现了一些不必要的DLL文件。最大的一个是System.Windows.Forms.dll, referenced by protobuf-net`。

层次结构为:protobuf-net -> System.ServiceModel -> System.Messaging -> System.Windows.Forms

为什么protobuf-net参考窗口特定的组装?

如何删除此内容?

1 个答案:

答案 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.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的。