Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 在发布版本中未触发命令_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

Xamarin 在发布版本中未触发命令

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}" /> 我的整个应用程序在模拟器上运行得很好。如果我在我真正的物理设备上按下按钮,我会看到视觉反馈(按钮改变颜

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

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

<Button Text="Report error" Command="{Binding NewErrorCommand}" />
我的整个应用程序在模拟器上运行得很好。如果我在我真正的物理设备上按下按钮,我会看到视觉反馈(按钮改变颜色),但什么也没发生

到目前为止我所尝试的:

  • 使用
    DisplayAlert
    进行了一些printf调试(未命中,请参阅源代码)
  • 将蓝牙鼠标连接到我的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");
    }        
}