如何修复xamarin iOS链接器以删除代码以防止应用程序崩溃?

时间:2017-02-22 05:38:35

标签: ios xamarin.ios linker xamarin.forms

我创建了一个Xamarin.Forms PCL项目。我已启用链接器仅链接sdk程序集。负载更快,工作速度更快,尺寸更小,但在很少的区域崩溃。我无法找到错误,因为它在链接器被禁用时工作正常。根据某人的建议,我在文件LinkerPleaseInclude中包含了几行。

var x = new System.ComponentModel.ReferenceConverter(typeof(void));

包含此行后,应用不会在少数几个区域崩溃,但数据不会像列表视图的动态数据模板那样显示。我是否需要在文件LinkerPleaseInclude中包含其他内容? 如何在链接器启用时阻止链接器删除代码?

2 个答案:

答案 0 :(得分:1)

您可以提示链接器不要链接由[Preserve]属性修饰的类型。

此属性未公开,但由于它是按名称(而不是按类型)自愿查找的,因此您可以定义自己的属性。

namespace Your.Namespace.Here
{
    [AttributeUsage(AttributeTargets.All)]
    public class PreserveAttribute : Attribute
    {
        public bool AllMembers;
        public bool Conditional;

        public PreserveAttribute(bool allMembers, bool conditional)
        {
            AllMembers = allMembers;
            Conditional = conditional;
        }

        public PreserveAttribute()
        {
        }
    }
}

然后,您可以使用[Preserve]属性修饰未由代码显式引用的类型或方法,例如仅从Xaml访问的类型,或通过反射。

答案 1 :(得分:0)

我已经解决了这个问题,我在listview中创建了DynamicDataTemplate来动态显示多种项目。我删除了它并创建了一个多模板选择器,现在它工作正常。 我不知道链接器将如何与DynamicDataTemplate一起使用,因为我尝试了Preserve属性,但它不起作用。但现在它的工作正常。