我使用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>
答案 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在编译时未经过验证,但仅在运行时验证。但是,如果打开XamlC
(https://developer.xamarin.com/guides/xamarin-forms/xaml/xamlc/),(大多数)解析错误将在编译时找到。这并不是使用XamlC
的唯一理由。