发布版本未触发命令

时间:2018-11-26 15:39:08

标签: xamarin xamarin.forms xamarin.android

我的主页上有一个导航到下一个视图的按钮。在Windows PC(Visual Studio 2017)上的模拟android设备(Android 8.1加速的x86)上的调试版本中,此方法非常有用。

按钮从这样的视图中绑定到我的视图模型:

<Button Text="Report error" Command="{Binding NewErrorCommand}" />

viewmodel代码:

public Command NewErrorCommand
{
    get
    {
        return _newErrorCommand ?? (_newErrorCommand = new Command(ExecuteNewErrorCommand, CanNewErrorCommand));
    }
}

private bool CanNewErrorCommand(object arg)
{
    return true;
}

private async void ExecuteNewErrorCommand(object obj)
{
    try
    {
        // I'll get here in simulation/debug build but not in release build on device
        await Application.Current.MainPage.DisplayAlert("Go", "Go", "Ok");

        await _navigation.PushAsync(new TestView(), false);
    }
    catch (Exception exc)
    {
        await Application.Current.MainPage.DisplayAlert("Error", exc.Message, "Cancel");
    }        
}

我的整个应用程序在模拟器上运行正常。如果我在实际的物理设备上按了按钮,则会看到视觉反馈(按钮会更改颜色),但是什么也没有发生。

到目前为止我尝试过的事情:

  • 使用DisplayAlert进行了一些printf调试(未命中,请参见源代码)
  • 将蓝牙鼠标连接到我的android设备(android 6.0),以防鼠标单击和手指点击之间存在差异(仍然没有工作按钮)

您可以帮助Xamarin.Forms初学者吗?


更新

我通过USB连接了Android手机以进行调试。该按钮在调试模式下起作用(达到断点,打开新页面),但在发行版本中仍然无法使用。

根据请求的链接器设置:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

如果您在Android项目属性的Build部分中将链接选项设置为“仅SDK程序集”,则发行版本将可用。

启用linker并将其设置为“ SDK和用户程序集”后,将删除大量代码(被压为不使用)。在您的情况下,NewErrorCommand属性被删除,因为该工具假定您没有使用它。

如果将其设置为“仅SDK程序集”,它将起作用,因为在这种配置下,链接器不会碰到任何您自己的程序集。