包含在apk中的mscorlib.dll中缺少方法

时间:2012-07-23 10:51:05

标签: xamarin.android

我在Monodroid中有一个混淆的应用程序,我的问题是apk中包含的mscorlib程序集没有实现System.String.Intern()方法,我的应用程序不起作用。

我的混淆器调用此方法来混淆字符串,我得到一个MissingMethodException。这个方法在apk中包含的程序集中不存在,但奇怪的是它确实存在于myproject / obj / release / assemblies / mscorlib.dll中

这些文件非常不同。如果我把文件myproject / obj / release / assemblies / mscorlib.dll放在apk中它可以工作,但这个解决方案是一个糟糕的解决方案,因为应用程序在其他点失败导致TypeLoadException,因为更改了dll。

有谁能告诉我为什么monodroid使用mscorlib减少的文件和替代解决方案?

感谢。

1 个答案:

答案 0 :(得分:1)

  

有谁能告诉我为什么monodroid使用mscorlib减少的文件和替代解决方案?

较小的文件用于将应用程序大小减少linking the assemblies。链接可能很脆弱,因为链接器不跟踪运行时行为。例如,使用Type.GetType("Foo")将不会保留类型Foo,因此如果未以其他方式引用,链接器可能会将其删除。

obj\Release\assemblies\mscorlib.dll是源程序集。 obj\Release\android/assets/mscorlib.dll是链接(较小)的程序集,它包含在.apk

如果您的混淆器直接使用String.Intern(),这可能表示链接器中存在错误。但是,如果您的混淆器使用反射(例如Type.GetMethod()),那么这将是预期的行为。要解决此问题,请明确使用String.Intern() within a falseflag block,以便保留该方法。