2017-05-18 17 views
1

Ich verwende Visual Studio 2017, um das Standard-Xamarin Forms PCL-Projekt in C# zu erstellen. Wenn ich irgendeinen Fehler im XAML mache, bleibt der InitializeComponent() Aufruf hängen. Es gibt keine Editor-, Compiler-, Builder- oder Laufzeitfehler. Gibt es eine Möglichkeit, die Ursache des Fehlers zu untersuchen? Ich bin mir ziemlich sicher, dass Visual Studio 2015 einen Laufzeitfehler verursacht hat.xamarin forms InitializeComponent hängt

Hier ist ein Beispiel mit einem Verweis auf einen fehlenden Stil. Das verursacht, dass InitializeComponent() hängt. Ich benutze den VisualStudio_android-23_x86_phone Emulator und VS macht das gleiche für jeden Emulator, den ich ausprobiert habe und auch mein Samsung Note 4. Danke.

<?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

Was ist der Fehler? – Adam

+0

Ich habe das gleiche Problem. Es ist nicht nur, dass das Ap hängt, die ganze IDE hat auch Probleme. Jedes Mal, wenn dies passiert, beginnt die IDE, einen meiner (virtuellen) CPU-Kerne zu umarmen. nach 8 Läufen habe ich 100% CPU-Auslastung, selbst wenn die App nicht mehr läuft, bis ich Visual Studio neu starte. :( –

Antwort

0

Sie können XAML Compilation aktivieren Fehler mit XAML bei der Kompilierung statt Laufzeit zu fangen.

+1

Der XAML-Compiler fängt den Fehler nicht ab (es kann etwas geben, aber nicht dieses). Dies ist wahrscheinlich die Aktivierung, aber es löst dieses Problem nicht. – user1813319

0

Wenn in Ihrem XAML ein Fehler auftritt, wird eine Ausnahme ausgelöst. Das Problem ist, dass Android oft die Ausnahme verschluckt, was zu einem Absturz führt.

Sie können versuchen zu brechen, wenn ein XamlParseException geworfen wird. Das sollte dich kurz vor dem Absturz auf den Punkt bringen.

Wie Sie angenommen haben, wird XAML zur Kompilierzeit nicht validiert, sondern nur zur Laufzeit. Wenn Sie jedoch XamlC (https://developer.xamarin.com/guides/xamarin-forms/xaml/xamlc/) aktivieren, werden die meisten der Analysefehler zur Kompilierzeit gefunden. Und das ist nicht das einzige Argument für die Verwendung von XamlC.

+0

Weiß jemand, wo MS Debug setzen - > Ausnahmen in VS2017. Es wurde ausgeblendet. Ich möchte Pause für XamlParseException einschalten, aber kann den Bildschirm nicht finden, um es zu tun. – user1813319

+0

Was Sie sagen, ist nicht falsch, aber es hilft nicht mit diesem speziellen Problem Ich habe das gleiche Problem und die Ansicht ist gut zusammengestellt. –

0

Die Antwort ist bemerkenswert einfach. Setzen Sie InitializeComponent in einen try/catch. Obwohl InitializeComponent nicht zurückgibt, wenn es einen XAML-Analysefehler erkennt, können Sie die Ausnahme abfangen und die ex.message ist nützlich.

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

Zeigt die Meldung "Xamarin.Forms.Xaml.XamlParseException. Position 09.12 Static nicht für Schlüssel myStyle gefunden". Ich hatte nicht erwartet, dass die Ausnahme abgefangen werden würde, aber ich war ehrlich falsch.

Dank Stephane für den "Schluck" Hinweis.