Share via


Behandeln von Problemen beim Portieren von Windows-Runtime 8.x zu UWP

Im vorherigen Thema ging es um das Portieren des Projekts.

Wir empfehlen dringend, dieses Handbuch für das Portieren vollständig zu lesen. Wir wissen aber auch, dass Sie möglichst schnell die Phase erreichen möchten, in der Ihr Projekt erstellt und ausgeführt wird. Zu diesem Zweck können Sie einen temporären Fortschritt erzielen, indem Sie allen nicht unbedingt erforderlichen Code auskommentieren und anschließend zurückkehren, um die Schulden später zu bezahlen. Die Tabelle mit Symptomen und Möglichkeiten zur Problembehandlung in diesem Thema kann in dieser Phase hilfreich für Sie sein, ersetzt jedoch nicht das Lesen der nächsten Themen. Sie können die Tabelle jederzeit zu Rate ziehen, während Sie die weiteren Themen lesen.

Ermitteln von Problemen

XAML-Analyseausnahmen sind u U. schwierig zu diagnostizieren, insbesondere wenn keine sinnvollen Fehlermeldungen innerhalb der Ausnahme vorhanden sind. Stellen Sie sicher, dass der Debugger für die Erfassung von Ausnahmen (erste Chance) konfiguriert ist (um die Analyseausnahme möglichst früh zu erfassen). Möglicherweise können Sie die Ausnahmevariable im Debugger überprüfen, um zu ermitteln, ob das HRESULT oder die Meldung hilfreiche Informationen enthält. Überprüfen Sie auch das Visual Studio-Ausgabefenster auf Fehlermeldungen des XAML-Parsers.

Wenn Ihre App beendet wird und Sie nur wissen, dass während der XAML-Markupanalyse eine unbehandelte Ausnahme ausgelöst wurde, ist die Ursache möglicherweise ein Verweis auf eine fehlende Ressource (d. h. eine Ressource, deren Schlüssel für universelle 8.1-Apps, jedoch nicht für Windows 10-Apps vorhanden ist, z. B. einige TextBlock-Stilschlüssel des Systems). Oder es kann sich um eine Ausnahme handeln, die innerhalb eines UserControl-Steuerelements, eines benutzerdefinierten Steuerelements oder eines benutzerdefinierten Layoutbereichs ausgelöst wird.

Als letzte Möglichkeit kann eine Binärdatei aufgeteilt werden. Entfernen Sie etwa die Hälfte des Markups von einer Seite, und führen Sie die App erneut aus. Sie wissen dann, ob sich der Fehler in der Hälfte befindet, die Sie entfernt haben (die Sie jetzt auf jeden Fall wiederherstellen sollten) oder in der Hälfte, die Sie nicht entfernt haben. Wiederholen Sie den Vorgang durch Teilen der Hälfte mit den Fehler solange, Sie das Problem eingegrenzt haben.

TargetPlatformVersion

In diesem Abschnitt wird erläutert, was zu tun ist, wenn beim Öffnen eines Windows 10-Projekts in Visual Studio folgende Meldung angezeigt wird: „Visual Studio-Update erforderlich. Mindestens ein Projekt erfordert ein Plattform-SDK (<version>), das entweder nicht installiert oder in einem zukünftigen Update von Visual Studio enthalten ist.“

  • Ermitteln Sie zunächst die Versionsnummer des SDK für Windows 10, die Sie installiert haben. Navigieren Sie zu C:\Programme (x86)\Windows Kits\10\Include\<versionfoldername> , und notieren Sie <sich versionsordnername>, der in der Vierfachnotation "Major.Minor.Build.Revision" angezeigt wird.
  • Öffnen Sie Ihre Projektdatei zur Bearbeitung, und suchen Sie das TargetPlatformVersion-Element und das TargetPlatformMinVersion-Element. Bearbeiten Sie sie so, dass sie wie folgt aussehen, und ersetzen Sie <versionsordnername> durch die Versionsnummer der Vierfachschreibweise, die Sie auf dem Datenträger gefunden haben:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
    <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Symptome und Möglichkeiten zur Problembehandlung

Die Lösungsinformationen in der Tabelle sollten ausreichen, um Ihr Problem selbst zu behandeln. Weitere Details zu den einzelnen Problemen finden Sie in den späteren Themen.

Symptom Problembehandlung
Beim Öffnen eines Windows 10-Projekts in Visual Studio wird folgende Meldung angezeigt: „Visual Studio-Update erforderlich. Mindestens ein Projekt erfordert ein Plattform-SDK (<version>), das entweder nicht installiert oder in einem zukünftigen Update von Visual Studio enthalten ist.“ Weitere Informationen finden Sie im Abschnitt TargetPlatformVersion in diesem Thema.
Wenn in einer XAML.CS-Datei „InitializeComponent“ aufgerufen wird, wird eine „System.InvalidCastException“ ausgelöst. Dies kann passieren, wenn mehrere XAML-Dateien (mindestens eine davon MRT-qualifiziert) dieselbe XAML.CS-Datei verwenden und Elemente x:Name-Attribute aufweisen, die zwischen den beiden XAML-Dateien inkonsistent sind. Versuchen Sie, den gleichen Elementen in XAML-Dateien denselben Namen hinzuzufügen, oder lassen Sie Namen ganz weg.
Wenn sie auf dem Gerät ausgeführt wird, die App beendet wird oder wenn Sie über Visual Studio gestartet werden, wird der Fehler "Unable to activate Windows-Runtime 8.x app [...] angezeigt. Fehler bei der Aktivierungsanforderung: „Windows konnte nicht mit der Zielanwendung kommunizieren.“ Dies weist in der Regel darauf hin, dass der Prozess der Zielanwendung abgebrochen wurde. […]”. Das Problem ist möglicherweise der imperative Code, der während der Initialisierung auf Ihren eigenen Seiten oder in gebundenen Eigenschaften (oder anderen Typen) ausgeführt wird. Es könnte auch beim Analysieren der XAML-Datei passieren, die angezeigt wird, wenn die App beendet wird (beim Starten in Visual Studio ist dies die Startseite). Suchen Sie nach ungültigen Ressourcenschlüsseln und/oder probieren Sie einige der Ratschläge im Abschnitt „Ermitteln von Problemen“ in diesem Thema aus.
Der XAML-Parser bzw. -Compiler oder eine Laufzeitausnahme meldet den Fehler „Die Ressource „<resourcekey>“ konnte nicht aufgelöst werden“. Der Ressourcenschlüssel gilt nicht für UWP (Universelle Windows-Plattform)-Apps (dies ist z. B. bei einigen Windows Phone-Ressourcen der Fall). Suchen Sie nach dem richtigen äquivalenten Ressourcenobjekt, und aktualisieren Sie Ihr Markup. Systemschlüssel wie PhoneAccentBrush können beispielsweise sofort auftreten.
Der C#-Compiler gibt folgenden Fehler aus: „Der Typ- oder Namespacename „<name>“ konnte nicht gefunden werden […]“ oder „Der Typ- oder Namespacename „<name>“ ist im Namespace […] nicht vorhanden“ oder „Der Typ- oder Namespacename „<name>“ ist im aktuellen Kontext nicht vorhanden“. Dies bedeutet wahrscheinlich, dass der Typ in ein Erweiterungs-SDK implementiert ist (es gibt jedoch auch Fälle, in denen die Lösung nicht so einfach ist). Verwenden Sie den Referenzinhalt für Windows APIs, um zu ermitteln, welches Erweiterungs-SDK die API implementiert und verwenden Sie dann den Visual Studio-Befehl Hinzufügen>Verweis, um diesem SDK einen Verweis auf Ihr Projekt hinzuzufügen. Wenn Ihre App auf die API-Gruppe für die universelle Gerätefamilie ausgerichtet ist, ist Folgendes wichtig: Sie müssen die ApiInformation-Klasse verwenden, um zur Laufzeit das Vorhandensein des Erweiterungs-SDKs zu prüfen, bevor Sie es aufrufen (dies wird als adaptiver Code bezeichnet). Wenn eine universelle API vorhanden ist, ist diese einer API in einem Erweiterungs-SDK immer vorzuziehen. Weitere Informationen finden Sie unter Erweiterungs-SDKs.

Das nächste Thema ist Portieren von XAML und UI.