Problembehandlung beim Portieren Windows Phone Silverlight zu UWP

Im vorherigen Thema wurde das Projekt portiert.

Es wird dringend empfohlen, das Ende dieses Portierungshandbuchs zu lesen, aber wir wissen auch, dass Sie sich darauf freuen, voranzuschreiten und in die Phase zu gelangen, in der Ihr Projekt erstellt und ausgeführt wird. Zu diesem Zweck können Sie temporäre Fortschritte erzielen, indem Sie alle nicht unbedingt benötigten Code kommentieren oder verstören und dann später zurückkehren, um diese Verschuldung abzuzahlen. Die Tabelle der Problembehandlungssymptome und Heilmittel in diesem Thema kann ihnen in diesem Stadium hilfreich sein, obwohl es kein Ersatz zum Lesen der nächsten Themen ist. Sie können immer wieder auf die Tabelle verweisen, während Sie die späteren Themen durcharbeiten.

Nachverfolgen von Problemen

XAML-Analyseausnahmen können schwierig zu diagnostizieren sein, insbesondere, wenn innerhalb der Ausnahme keine aussagekräftigen Fehlermeldungen 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, könnte dies das Ergebnis eines Verweises auf eine fehlende Ressource sein (d. a. eine Ressource, deren Schlüssel für Windows Phone Silverlight-Apps, aber nicht für Windows 10-Apps vorhanden ist, z. B. einige TextBlock-Stiltasten). Oder es kann sich um eine Ausnahme innerhalb eines UserControl-Steuerelements, eines benutzerdefinierten Steuerelements oder eines benutzerdefinierten Layoutpanels handelt.

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 werden dann wissen, ob sich der Fehler in der Hälfte befindet, die Sie entfernt haben (die Sie jetzt in jedem 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 die Meldung "Visual Studio-Update erforderlich" angezeigt wird. Mindestens ein Projekt erfordert eine Plattform-SDK-Version<>, die entweder nicht installiert ist oder als Teil eines zukünftigen Updates für Visual Studio enthalten ist."

  • Ermitteln Sie zunächst die Versionsnummer des SDK für Windows 10, das Sie installiert haben. Navigieren Sie zu "C:\Programme (x86)\Windows Kits\10\Include\<versionfoldername> ", und notieren Sie sich den <Versionsordnernamen>, der in der vierfachen Schreibweise "Major.Minor.Build.Revision" enthalten ist.
  • Öffnen Sie Die Projektdatei zum Bearbeiten und Suchen der TargetPlatformVersion Elemente TargetPlatformMinVersion . Bearbeiten Sie sie, um wie folgt zu aussehen, und ersetzen <Sie den Versionsordnernamen> mit der Vierfachversionsnummer, die Sie auf dem Datenträger gefunden haben:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
   <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Problembehandlung bei Symptomen und Abhilfemaßnahmen

Die Abhilfeinformationen in der Tabelle sollen Ihnen genügend Informationen geben, um die Blockierung selbst aufzuheben. Weitere Details zu den einzelnen Problemen finden Sie in den nachfolgenden Themen.

Symptom Problembehandlung
Der XAML-Parser oder Compiler gibt den Fehler "Der Name "<Typename>" ist im Namespace nicht vorhanden [...]." Wenn <der Typname> ein benutzerdefinierter Typ ist, ändern Sie in Ihren Namespacepräfixdeklarationen im XAML-Markup "clr-namespace" in "using", und entfernen Sie alle Assemblytoken. Bei Plattformtypen bedeutet dies, dass der Typ nicht auf den Universelle Windows-Plattform (UWP) angewendet wird, sodass Sie das Äquivalent finden und Ihr Markup aktualisieren. Beispiele, die sofort auftreten können, sind phone:PhoneApplicationPage und shell:SystemTray.IsVisible.
Der XAML-Parser oder Compiler gibt den Fehler "Membername<>" wird nicht erkannt oder ist nicht zugänglich." oder "Die Eigenschaft "<Propertyname>" wurde vom Typ [...]." nicht gefunden. Diese Fehler werden angezeigt, nachdem Sie einige Typnamen portiert haben, z. B. die Stammseite. Das Element oder die Eigenschaft gilt nicht für die UWP. Suchen Sie daher das Äquivalent, und aktualisieren Sie Ihr Markup. Beispiele, die sofort auftreten können, sind SupportedOrientations und Orientation.
Der XAML-Parser oder Compiler gibt den Fehler "Die angefügte Eigenschaft [...] wurde nicht gefunden [...]." oder "Unbekannter anfügenbarer Member [...].". Dies wird wahrscheinlich durch den Typ und nicht durch die angefügte Eigenschaft verursacht; In diesem Fall haben Sie bereits einen Fehler für den Typ, und dieser Fehler wird entfernt, sobald Sie dies behoben haben. Beispiele, die sofort auftreten können, sind phone:PhoneApplicationPage.Resources und phone:PhoneApplicationPage.DataContext.
Der XAML-Parser oder Compiler oder eine Laufzeitausnahme gibt den Fehler "Die Ressource "<Resourcekey>" konnte nicht aufgelöst werden." Der Ressourcenschlüssel gilt nicht für Universelle Windows-Plattform(UWP)-Apps. Suchen Sie die richtige entsprechende Ressource, und aktualisieren Sie Ihr Markup. Beispiele, die sofort auftreten können, sind System-TextBlock-Formatvorlagenschlüssel wie PhoneTextNormalStylez. B. .
Der C#-Compiler gibt den Fehler "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 Compiler den richtigen UWP-Namespace für einen Typ noch nicht kennt. Verwenden Sie den Befehl "Auflösen" von Visual Studio, um dies zu beheben.
Wenn sich die API nicht in der Gruppe von APIs befindet, die als universelle Gerätefamilie bezeichnet werden (d. h. die API wird in einem Erweiterungs-SDK implementiert), verwenden Sie die Erweiterungs-SDKs.
Es kann andere Fälle geben, in denen port weniger einfach ist. Beispiele, die sofort auftreten können, sind DesignerProperties und BitmapImage.
Wenn sie auf dem Gerät ausgeführt wird, wird die App beendet oder wenn sie von Visual Studio gestartet wird, wird der Fehler "Windows-Runtime 8.x-App [...] kann nicht aktiviert werden[...] angezeigt. Fehler bei der Aktivierungsanforderung mit dem Fehler "Windows konnte nicht mit der Zielanwendung kommunizieren. Dies weist in der Regel darauf hin, dass der Prozess der Zielanwendung abgebrochen wurde. […]”. Das Problem könnte der imperative Code sein, der in Ihren eigenen Seiten oder in gebundenen Eigenschaften (oder anderen Typen) während der Initialisierung ausgeführt wird. Oder beim Analysieren der XAML-Datei kann es passieren, dass sie angezeigt wird, wenn die App beendet wird (wenn sie von Visual Studio gestartet wird, dies ist die Startseite). Suchen Sie nach ungültigen Ressourcenschlüsseln, und/oder probieren Sie einige der Anleitungen im Abschnitt "Nachverfolgung von Problemen " in diesem Thema aus.
XamlCompiler-Fehler WMC0055: Der Textwert "<Ihre Streamgeometrie>" kann nicht der Eigenschaft "Clip" vom Typ "RectangleGeometry" zugewiesen werden. In der UWP gibt es den Typ der UWP-App "Microsoft DirectX " und "XAML-C++".
XamlCompiler-Fehler WMC0001: Unbekannter Typ "RadialGradientBrush" im XML-Namespace [...] Die UWP verfügt nicht über den RadialGradientBrush-Typ . Entfernen Sie den RadialGradientBrush aus Markup, und verwenden Sie einen anderen Typ von Microsoft DirectX - und XAML-C++-UWP-App.
XamlCompiler-Fehler WMC0011: Unbekanntes Element 'OpacityMask' für Element '<UIElement-Typ>' Die UWP-UWP-App "Microsoft DirectX " und "XAML C++".
Eine erste Zufallsausnahme vom Typ "System.Runtime.InteropServices.COMException" ist in SYSTEM aufgetreten. NI.DLL. Weitere Informationen: Die Anwendung rief eine Schnittstelle auf, die für einen anderen Thread der Anwendung aufgerufen wurde. (Ausnahme von HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)). Die Arbeit, die Sie ausführen, muss im UI-Thread ausgeführt werden. Rufen Sie " CoreWindow.GetForCurrentThread" auf.
Eine Animation wird ausgeführt, hat aber keine Auswirkung auf die Zieleigenschaft. Machen Sie die Animation unabhängig, oder legen Sie sie fest EnableDependentAnimation="True" . Siehe Animation.
Beim Öffnen eines Windows 10-Projekts in Visual Studio wird die Meldung "Visual Studio-Update erforderlich" angezeigt. Mindestens ein Projekt erfordert eine Plattform-SDK-Version<>, die entweder nicht installiert ist oder als Teil eines zukünftigen Updates für Visual Studio enthalten ist." Weitere Informationen finden Sie im Abschnitt "TargetPlatformVersion " in diesem Thema.
Eine System.InvalidCastException wird ausgelöst, wenn InitializeComponent in einer xaml.cs Datei aufgerufen wird. Dies kann passieren, wenn Sie mehrere XAML-Dateien (mindestens eine von denen MRT-qualifiziert) dieselbe xaml.cs Datei und Elemente mit x:Name-Attributen haben, die zwischen den beiden XAML-Dateien inkonsistent sind. Versuchen Sie, denselben Namen zu denselben Elementen in beiden XAML-Dateien hinzuzufügen, oder lassen Sie Namen vollständig weg.

Das nächste Thema ist das Portieren von XAML und der Benutzeroberfläche.