【问题标题】:xamarin forms InitializeComponent hangsxamarin 表单 InitializeComponent 挂起
【发布时间】:2017-05-18 00:04:35
【问题描述】:

我正在使用 Visual Studio 2017 在 C# 中创建默认的 Xamarin Forms PCL 项目。如果我在 XAML 中出现任何错误,InitializeComponent() 调用就会挂起。没有编辑器、编译器、构建器或运行时错误。有没有办法研究错误的原因?我很确定 Visual Studio 2015 引发了运行时错误。

这是一个引用缺失样式的示例。这会导致 InitializeComponent() 挂起。我正在使用 VisualStudio_android-23_x86_phone 模拟器,VS 对我尝试过的每个模拟器以及我的三星 Note 4 都做了同样的事情。谢谢。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Broken"
             x:Class="Broken.MainPage">
    <Label Text="Welcome to Xamarin Forms!" 
           VerticalOptions="Center" 
           HorizontalOptions="Center"
           Style="{StaticResource myStyle}"/>

</ContentPage>

【问题讨论】:

  • 错误是什么?
  • 我遇到了同样的问题。不仅ap挂了,整个IDE也有问题。每次发生这种情况时,IDE 都会开始拥抱我的一个(虚拟)CPU 内核。运行 8 次后,即使应用程序不再运行,直到我重新启动 Visual Studio,我的 cpu 使用率也达到了 100%。 :(

标签: c# android xamarin xamarin.forms


【解决方案1】:

答案非常简单。将 InitializeComponent 放在 try/catch 中。即使 InitializeComponent 在检测到 XAML 解析错误时没有返回,您也可以捕获异常并且 ex.message 很有用。

try
            {
                InitializeComponent();
            }
            catch (Exception ex)
            {
                throw ex;
            }

显示消息“Xamarin.Forms.Xaml.XamlParseException:位置 9:12。找不到密钥 myStyle 的静态资源”。我没想到异常会被捕获,但我意外地错了。

感谢 Stephane 提供的“燕子”线索。

【讨论】:

  • 非常感谢您!这种调试方法是如此简单和出色,以至于不能被高估:)
【解决方案2】:

您可以启用 XAML Compilation 在编译时而不是运行时捕获 XAML 的错误。

【讨论】:

  • XAML 编译器没有捕捉到错误(它可能捕捉到一些错误,但不是这个)。这可能值得启用,但它并不能解决这个问题。
【解决方案3】:

如果您的 XAML 中有错误,则会引发异常。问题是 Android 经常吞下导致崩溃的异常。

XamlParseException 被抛出时,你可以尝试打破。这应该让你在崩溃之前到达这一点。

如您所想,XAML 不会在编译时验证,而只是在运行时验证。但是,如果打开XamlChttps://developer.xamarin.com/guides/xamarin-forms/xaml/xamlc/),(大部分)解析错误会在编译时发现。这不是使用XamlC 的唯一理由。

【讨论】:

  • 有谁知道 MS 把 Debug -> VS2017 中的异常放在哪里。它已被隐藏。我想为 XamlParseException 打开 break 但找不到执行此操作的屏幕。
  • 你说的没错,但它对这个特殊问题没有帮助。我遇到了同样的问题,视图编译得很好。
猜你喜欢
  • 2019-10-02
  • 1970-01-01
  • 2020-03-08
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 2018-11-11
相关资源
最近更新 更多