【问题标题】:Clickevent not found at runtime when using Sdk and UserAssemblies linking(Linking all assemblies)使用 Sdk 和 UserAssemblies 链接时在运行时找不到 Clickevent(链接所有程序集)
【发布时间】:2016-05-27 06:20:11
【问题描述】:

我在 Xaml 中有按钮,并且我已经提到了在 click 事件中调用的方法,如下所示。

<Button BorderRadius="1" BackgroundColor="#FFCA00" Text="Sign In" TextColor="Black" Clicked="login_clicked" HorizontalOptions="FillAndExpand" HeightRequest="44" WidthRequest="220" FontSize="19">

而后端C#中的方法为

public void login_clicked(object sender, EventArgs e)
{
     try
     {
          ValidateUser();
     }
     catch (Exception ex){}
}

问题是,当我在链接选项中使用 Sdk Assemblies 时,它工作得很好,但是当我使用 Sdk and User Assemblies 时,这个方法有点被剥离,并且在运行时我得到一个异常,说没有找到事件 login_clicked

我知道这是因为链接器,但我不知道这背后的原因。链接器不解析 Xaml 以检查是否使用了此方法(我的意思是说此方法是否必要且不应该被剥离)。

当我从 C# 注册事件时,链接器不会删除 login_clicked 方法。

btnLogin.Clicked += login_clicked;

【问题讨论】:

    标签: c# xamarin linker xamarin.forms


    【解决方案1】:

    XAML不被解析为编译时,它基本上是一个资源字符串。

    两种选择:

    1. 使用 [Preserve] 属性标记该方法,以便链接器不会删除它。

      [保留]

    参考:Cross platform Linking 参考:iOS Linker 参考:Android Linker

    1. 将您的 XAML 预编译到 IL 中,以便链接器知道正在使用该事件。

      [程序集:XamlCompilation (XamlCompilationOptions.Compile)]

    这具有额外的好处,即在编译时检查 XAML、XAML 加载和实例化时间有所减少,并且内存略有减少。

    参考:Using the XAML compiler to increase the performance of a Xamarin.Forms app

    【讨论】:

    • 是的,我知道 preserve 属性。我主要关心的是链接器是否解析 xaml 文件。 XamlCompilation 解决方案也运行良好。谢谢。@SushiHangover
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多