在 Xamarin 项目中,我将链接器行为设置为“链接所有引用”。这样做时,程序集通过删除未使用的成员得到优化。一个问题是,它实际上并没有意识到我们需要它们进行反射。我知道我们可以使用 Preserve 属性来告诉链接器将所有符号保留在类中,但是如果程序集是 DLL 或者只是不是 iOS 项目(不引用单点程序集,并且不能).有没有一种方法可以将库中的所有类设置为“保留”、忽略它或仅设置要优化的某些类(反向 PreserveAttribute)?
最佳答案
@SharpMobileCode 给出了很好的解释,但还有其他两种方法可以解决这个问题。
使用 XML 文件并在项目的选项中使用
--xml=your.file
,在 Additional mtouch arguments 下。当您无法更改程序集的源代码时 - 或者 - 当您想要/需要使用工具来生成要保留的成员列表时,这可能很有用;使用新的
Preserve(Type)
构造函数。这允许您在已经引用了Xamarin.iOS.dll
的不同程序集(例如您的主 .exe)中添加保留指令(因此无需定义您的自己的类型)。例如
[程序集:保留(typeof(MyType),AllMembers = true)]
关于c# - Xamarin.iOS 链接器删除反射所需的类中的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30810180/