Xamarin 在发布版本中未触发命令
我的主页上有一个按钮,可以导航到下一个视图。这在我的windows PC(Visual Studio 2017)上模拟android设备(android 8.1加速x86)的调试构建中非常有效 按钮从我的视图绑定到我的viewmodel,如下所示:Xamarin 在发布版本中未触发命令,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我的主页上有一个按钮,可以导航到下一个视图。这在我的windows PC(Visual Studio 2017)上模拟android设备(android 8.1加速x86)的调试构建中非常有效 按钮从我的视图绑定到我的viewmodel,如下所示: <Button Text="Report error" Command="{Binding NewErrorCommand}" /> 我的整个应用程序在模拟器上运行得很好。如果我在我真正的物理设备上按下按钮,我会看到视觉反馈(按钮改变颜
<Button Text="Report error" Command="{Binding NewErrorCommand}" />
我的整个应用程序在模拟器上运行得很好。如果我在我真正的物理设备上按下按钮,我会看到视觉反馈(按钮改变颜色),但什么也没发生
到目前为止我所尝试的:
- 使用
进行了一些printf调试(未命中,请参阅源代码)DisplayAlert
- 将蓝牙鼠标连接到我的android设备(android 6.0),以防鼠标点击和手指点击之间存在差异(仍然没有工作按钮)
更新 我通过USB连接android手机进行调试。该按钮在调试模式下工作(正在命中断点,打开新页面),但在发布版本中仍然不起作用 根据请求的链接器设置:
如果在Android项目属性的
Build
部分将链接选项设置为“仅SDK程序集”,则发布版本将正常工作
当启用并设置为“SDK和用户程序集”时,会删除大量代码(按此键不使用)。在您的情况下,NewErrorCommand
属性被剥离,因为该工具假定您没有使用它
如果您将其设置为“仅SDK程序集”,则该选项有效,因为在该配置下,链接器将不会接触您自己的任何程序集。您能提供链接器配置的屏幕截图吗?您可以在Android项目属性下找到buildsection@nmilcoff:添加了release Build的链接器设置。您是否可以尝试将链接部分仅更改为SDK程序集,而不是SDK和用户程序集?@nmilcoff:是的,就是这样!如果我将链接器部分更改为“仅SDK程序集”,则发布版本运行良好。非常感谢你的帮助,我真的很感激。如果你把你的评论作为回答,我会接受你的回答。如果你也能解释为什么会这样,那就更好了。
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");
}
}