Xamarin App 在调试时运行,但在发布时崩溃

Posted

技术标签:

【中文标题】Xamarin App 在调试时运行,但在发布时崩溃【英文标题】:Xamarin App runs on debug but crashes on release 【发布时间】:2018-09-13 22:25:06 【问题描述】:

我的 Xamarin 应用程序在调试模式下完美运行,但在发布模式下崩溃。我收到此错误:“不幸的是,应用程序已停止”。我通过 USB 连接了我的手机,当我在发布模式下运行应用程序时,我收到了这个错误。

不幸的是,我无法在发布模式中调试应用程序,因为我在输出窗口中收到此消息:“android 应用程序正在运行(在 android 项目属性中已禁用调试)”,尽管选中了“启用开发人员工具”框.我尝试了所有链接替代 None/SDK/SDK 和 User 但仍然无法正常工作。

有没有办法在日志文件或其他文件中查看导致崩溃的原因?

【问题讨论】:

如果您能提供minimal reproducible example,那就太好了。 发布模式可以开启调试 无论如何***.com/questions/4424544/… logcat 文件告诉你什么 Xamarin app runs on emulator but crashes on real device的可能重复 因为第一次没有得到任何答案而再次问同样的问题在这里是不受欢迎的。 ***.com/questions/49645888/… 【参考方案1】:

在挣扎了几个小时之后,就我而言,这是因为我在 App.xaml 文件中使用了静态资源,同时在声明上方定义了另一个资源。奇怪的是它在调试模式下完美运行,但由于某种原因,在发布模式下不断崩溃。查明问题后,我对声明进行了重新排序,问题得到解决。

无论如何,您可以做的是将 MainActivity 中的整个 onCreate 块包装在 try catch 块中,并在某处记录异常,例如公共 http 请求记录器或将其写入文件。在撰写本文时,RequestBin 拥有这样的免费服务。创建端点后,只需向带有异常消息作为数据的 url 发出 post 请求。这是一个例子:

protected override void OnCreate(Bundle bundle)

    try
    
        // oncreate logic
    
    catch(Exception ex)
    
        var client = new HttpClient();
        client.PostAsync("your logger api url", new StringContent(ex.ToString())).Wait();
    

希望这对某人有所帮助。

【讨论】:

谢谢,我在我的一个页面中也使用了错误的静态资源,但为什么它在调试模式下可以完美运行?在这种情况下很难找到问题。 谢谢!这对我有用!节省了很多时间【参考方案2】:

你可以试试下面的

    手动卸载在调试模式下部署的本地应用。部署发布应用。

    更新你的 Xamarin 版本

    项目设置→Android选项→链接器→配置=发布;链接 = 仅 Sdk 程序集

【讨论】:

我发现“Sdk 和用户程序集”链接选项只会搞砸构建。使用此选项时,我遇到了“无法实例化”和“找不到”类。将其设置为“仅 Sdk”可以正常工作。当 Xamarin 为您提供一个选项但它很少起作用时,这是多么有趣。即便如此,2021 年仍会发生。【参考方案3】:

确保在release配置

中没有选择Shared Mono Runtime

【讨论】:

我的问题只是在物理设备(不是模拟器)上的发布模式下的 ios 构建,结果是项目属性上的链接设置与调试模式和发布模式不同。原理同上。【参考方案4】:

我在项目属性中为“发布”关闭了“优化代码”。为我工作。

【讨论】:

【参考方案5】:

我今天遇到了同样的问题。在对配置和构建设置进行多次试验后,唯一对我有用的解决方案是通过 NuGet 包管理器更新所有 Xamarin 相关包。下次遇到这种情况可以试试这个。

【讨论】:

【参考方案6】:

实际上,清理解决方案,卸载应用程序和卸载 API 对我来说工作正常

【讨论】:

以上是关于Xamarin App 在调试时运行,但在发布时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

我无法调试 Xamarin.Android 应用程序

UWP XAMARIN 在 RELEASE 模式下崩溃(但在调试中工作良好)

mdtool 在使用发布时创建 IPA 文件,但在使用调试配置时不创建

Xamarin App在Xamarin更新后没有编译

Xamarin Forms Android 应用程序在使用 VS Android 模拟器运行调试时崩溃

Xamarin android 崩溃调试