Partager via


Résolution des problèmes de portage de Silverlight Windows Phone vers UWP

La rubrique précédente portait le projet.

Nous vous recommandons vivement de lire jusqu’à la fin de ce guide de portage, mais nous comprenons également que vous êtes impatient d’aller de l’avant et de passer à l’étape où votre projet génère et s’exécute. À cette fin, vous pouvez faire des progrès temporaires en commentant ou en stubbant n’importe quel code non essentiel, puis en retournant pour rembourser cette dette ultérieurement. Le tableau des symptômes de résolution des problèmes et des remèdes dans cette rubrique peut vous être utile à ce stade, même s’il n’est pas un substitut à la lecture des rubriques suivantes. Vous pouvez toujours vous référer au tableau à mesure que vous progressez dans les rubriques ultérieures.

Suivi des problèmes

Les exceptions d’analyse XAML peuvent être difficiles à diagnostiquer, en particulier s’il n’existe aucun message d’erreur significatif dans l’exception. Assurez-vous que le débogueur est configuré pour intercepter les exceptions de première chance (pour essayer d’intercepter l’exception d’analyse le plus tôt possible). Vous pourrez peut-être inspecter la variable d’exception dans le débogueur pour déterminer si la valeur HRESULT ou le message comportent des informations utiles. Vérifiez également la fenêtre de sortie de Visual Studio pour voir si elle contient des messages d’erreur de l’analyseur XAML.

Si votre application se termine et que tout ce que vous savez est qu’une exception non gérée a été levée pendant l’analyse de balisage XAML, cela peut être le résultat d’une référence à une ressource manquante (autrement dit, une ressource dont la clé existe pour les applications Silverlight Windows Phone, mais pas pour les applications Windows 10, telles que certaines clés de style TextBlock système). Ou bien, il peut s’agir d’une exception levée à l’intérieur d’un UserControl, d’un contrôle personnalisé ou d’un panneau de disposition personnalisé.

En dernier recours, vous pouvez effectuer un fractionnement binaire. Supprimez environ la moitié du balisage d’une page et réexécutez l’application. Vous saurez ensuite si l’erreur se trouve quelque part dans la moitié que vous avez supprimée (que vous devez maintenant restaurer dans n’importe quel cas) ou dans la moitié que vous n’avez pas supprimée. Répétez ce processus en fractionnant la moitié qui contient l’erreur et ainsi de suite jusqu’à ce que vous ayez ciblé le problème.

TargetPlatformVersion

Cette section explique ce qu’il faut faire si, lors de l’ouverture d’un projet Windows 10 dans Visual Studio, vous voyez le message « Mise à jour de Visual Studio requise. Un ou plusieurs projets nécessitent une version> du Kit de développement logiciel (SDK) <de plateforme qui n’est pas installée ou qui est incluse dans le cadre d’une prochaine mise à jour vers Visual Studio. »

  • Tout d’abord, déterminez le numéro de version du Kit de développement logiciel (SDK) pour Windows 10 que vous avez installé. Accédez à C :\Program Files (x86)\Windows Kits\10\Include\<versionfoldername> et notez le nom> du dossier de <version, qui sera en quad notation, « Major.Minor.Build.Revision ».
  • Ouvrez votre fichier projet pour modifier et rechercher les éléments et TargetPlatformMinVersion les TargetPlatformVersion éléments. Modifiez-les pour ressembler à ceci, en remplaçant <le nom du dossier> de version par le numéro de version de quad notation que vous avez trouvé sur le disque :
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
   <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Résolution des symptômes et des remèdes

Les informations de remède dans le tableau sont destinées à vous donner suffisamment d’informations pour vous débloquer. Vous trouverez plus d’informations sur chacun de ces problèmes lors de la lecture de rubriques ultérieures.

Symptôme Solution
L’analyseur XAML ou le compilateur donne l’erreur « Le nom «< typename> » n’existe pas dans l’espace de noms [...]. » Si <typename> est un type personnalisé, dans vos déclarations de préfixe d’espace de noms dans le balisage XAML, remplacez « clr-namespace » par « using » et supprimez les jetons d’assembly. Pour les types de plateforme, cela signifie que le type ne s’applique pas au plateforme Windows universelle (UWP), donc recherchez l’équivalent et mettez à jour votre balisage. Les exemples que vous pouvez rencontrer immédiatement sont phone:PhoneApplicationPage et shell:SystemTray.IsVisible.
L’analyseur XAML ou le compilateur donne l’erreur « Le membre «< membername » n’est pas reconnu ou n’est pas accessible. » ou « La propriété «< propertyname>> » est introuvable dans le type [...].. Ces erreurs commencent à s’afficher une fois que vous avez porté certains noms de type, tels que la page racine. Le membre ou la propriété ne s’applique pas à UWP. Par conséquent, recherchez l’équivalent et mettez à jour votre balisage. Les exemples que vous pouvez rencontrer immédiatement sont SupportedOrientations et Orientation.
L’analyseur XAML ou le compilateur donne l’erreur « La propriété attachable [...] a été introuvable [...]." ou « Membre joignable inconnu [...]. ». Cela est susceptible d’être dû au type plutôt qu’à la propriété jointe ; dans ce cas, vous aurez déjà une erreur pour le type et cette erreur disparaît une fois que vous le corrigez. Les exemples que vous pouvez rencontrer immédiatement sont phone:PhoneApplicationPage.Resources et phone:PhoneApplicationPage.DataContext.
L’analyseur OU le compilateur XAML, ou une exception d’exécution, donne l’erreur « La ressource «< resourcekey> » n’a pas pu être résolue. » La clé de ressource ne s’applique pas aux applications plateforme Windows universelle (UWP). Recherchez la ressource équivalente correcte et mettez à jour votre balisage. Les exemples que vous pouvez rencontrer immédiatement sont des clés de style TextBlock système telles que PhoneTextNormalStyle.
Le compilateur C# donne l’erreur « Impossible de trouver le nom du type ou< de l’espace de noms « name> » ou « Le nom du type ou de l’espace de noms '<name>' n’existe pas dans l’espace de noms [...] » ou « Le nom du type ou de l’espace de noms '<name>' n’existe pas dans le contexte actuel ». Cela signifie probablement que le compilateur ne connaît pas encore l’espace de noms UWP correct pour un type. Utilisez la commande Resolve de Visual Studio pour résoudre ce problème.
Si l’API n’est pas dans l’ensemble d’API appelées famille d’appareils universelles (en d’autres termes, l’API est implémentée dans un kit SDK d’extension), utilisez les kits SDK d’extension.
Il peut y avoir d’autres cas où le port est moins simple. Les exemples que vous pouvez rencontrer immédiatement sont DesignerProperties et BitmapImage.
Lors de l’exécution sur l’appareil, l’application se termine ou lorsqu’elle est lancée à partir de Visual Studio, l’erreur « Impossible d’activer l’application Windows Runtime 8.x [...]. La demande d’activation a échoué avec l’erreur « Windows n’a pas pu communiquer avec l’application cible. Cela indique généralement que le processus de l’application cible a été abandonné. […]”. Le problème peut être le code impératif exécuté dans vos propres pages ou dans des propriétés liées (ou d’autres types) pendant l’initialisation. Ou bien, il peut se produire lors de l’analyse du fichier XAML sur le point d’être affiché lorsque l’application s’est terminée (si elle est lancée à partir de Visual Studio, qui sera la page de démarrage). Recherchez des clés de ressource non valides et/ou essayez certaines des instructions de la section Suivi des problèmes dans cette rubrique.
Erreur XamlCompiler WMC0055 : Impossible d’affecter la valeur de texte «< votre géométrie> de flux » à la propriété « Clip » de type « RectangleGeometry » Dans UWP, le type de l’application UWP Microsoft DirectX et XAML C++.
Erreur XamlCompiler WMC0001 : type inconnu « RadialGradientBrush » dans l’espace de noms XML [...] L’UWP n’a pas le type RadialGradientBrush . Supprimez RadialGradientBrush du balisage et utilisez un autre type d’application UWP Microsoft DirectX et XAML C++.
Erreur XamlCompiler WMC0011 : membre inconnu 'OpacityMask' sur l’élément '<UIElement type>' Application UWP Microsoft DirectX et XAML C++ UWP.
Une première exception de type « System.Runtime.InteropServices.COMException » s’est produite dans SYSTEM. NI.DLL. Informations supplémentaires : l'application a appelé une interface qui était maintenue en ordre pour un thread différent. (Exception de HRESULT : 0x8001010E (RPC_E_WRONG_THREAD)). Le travail que vous effectuez doit être effectué sur le thread d’interface utilisateur. Appelez CoreWindow.GetForCurrentThread).
Une animation est en cours d’exécution, mais elle n’a aucun effet sur sa propriété cible. Soit rendre l’animation indépendante, soit définie EnableDependentAnimation="True" dessus. Voir Animation.
Lors de l’ouverture d’un projet Windows 10 dans Visual Studio, vous voyez le message « Mise à jour de Visual Studio requise. Un ou plusieurs projets nécessitent une version> du Kit de développement logiciel (SDK) <de plateforme qui n’est pas installée ou qui est incluse dans le cadre d’une prochaine mise à jour vers Visual Studio. » Consultez la section TargetPlatformVersion de cette rubrique.
Une exception System.InvalidCastException est levée lorsque InitializeComponent est appelé dans un fichier xaml.cs. Cela peut se produire lorsque vous avez plusieurs fichiers xaml (dont au moins un est qualifié MRT) partageant le même fichier xaml.cs et que les éléments ont des attributs x :Name incohérents entre les deux fichiers xaml. Essayez d’ajouter le même nom aux mêmes éléments dans les deux fichiers xaml, ou omettez complètement les noms.

La rubrique suivante porte le code XAML et l’interface utilisateur.