【问题标题】:Command not triggered in release build发布版本中未触发命令
【发布时间】:2018-11-27 03:32:54
【问题描述】:

我的 MainPage 上有一个按钮,可以导航到下一个视图。这在我的 Windows PC(Visual Studio 2017)上的模拟 android 设备(Android 8.1 加速 x86)上的调试构建中非常有用。

按钮从我的视图绑定到我的视图模型,如下所示:

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

视图模型代码:

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项目属性下找到构建部分
  • @nmilcoff:添加了发布版本的链接器设置
  • 您能否尝试将链接部分更改为仅 SDK 程序集,而不是 SDK 和用户程序集?
  • @nmilcoff:是的,就是这样!如果我将链接器部分更改为“仅 SDK 程序集”,则发布版本运行良好。非常感谢您的帮助,我真的很感激。如果您将评论作为答案,我将接受它作为答案。如果您也能解释为什么会发生这种情况,那就更好了。

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

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

linker 被启用并设置为“SDK 和用户程序集”时,会删除很多代码(被强制不使用)。在您的情况下,NewErrorCommand 属性被删除,因为该工具假定您没有使用它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多