xamarin表单InitializeComponent挂起

时间:2017-05-18 00:04:35

标签: c# android xamarin xamarin.forms

我使用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>

3 个答案:

答案 0 :(得分:1)

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

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

显示消息&#34; Xamarin.Forms.Xaml.XamlParseException:位置9:12。找不到关键myStyle&#34;的StaticResource。我并不期待这个例外被抓住,但我偶然错了。

感谢Stephane的'吞咽&#34;线索。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您的XAML出现错误,则会抛出异常。问题是Android经常吞下导致崩溃的异常。

您可以尝试在抛出XamlParseException时中断。这应该让你在崩溃前达到目的。

如您所知,XAML在编译时未经过验证,但仅在运行时验证。但是,如果打开XamlChttps://developer.xamarin.com/guides/xamarin-forms/xaml/xamlc/),(大多数)解析错误将在编译时找到。这并不是使用XamlC的唯一理由。