Passer de Windows Runtime 8.x à UWPMove from Windows Runtime 8.x to UWP

Si vous disposez d’une application 8.1 universelle (qu’elle cible Windows 8.1, Windows Phone 8.1 ou les deux), vous constaterez que le portage de votre code source et de vos compétences vers Windows 10 s’effectue en toute transparence.If you have a Universal 8.1 app—whether it's targeting Windows 8.1, Windows Phone 8.1, or both—then you'll find that your source code and skills will port smoothly to Windows 10. Grâce à Windows 10, vous pouvez créer une application de plateforme Windows universelle (UWP), à savoir un package d’application unique que vos clients peuvent installer sur tout type d’appareil.With Windows 10, you can create a Universal Windows Platform (UWP) app, which is a single app package that your customers can install onto every kind of device. Pour en savoir plus sur Windows 10, sur les applications UWP et sur les concepts de code adaptatif et d’interface utilisateur adaptative que nous mentionnerons dans ce guide de portage, voir le Guide des applications UWP.For more background on Windows 10, UWP apps, and the concepts of adaptive code and adaptive UI that we'll mention in this porting guide, see Guide to UWP apps.

Pendant le portage, vous constaterez que Windows 10 partage la majorité des API avec les plateformes précédentes, ainsi que le balisage XAML, l’infrastructure d’interface utilisateur et des outils, et qu’elles sont toutes très conviviales.While porting, you'll find that Windows 10 shares the majority of APIs with the previous platforms, as well as XAML markup, UI framework, and tooling, and you'll find it all reassuringly familiar. Comme précédemment, vous avez toujours le choix entre les langages de programmation C++, C# et Visual Basic pour l’infrastructure d’interface utilisateur XAML.Just as before, you can still choose between C++, C#, and Visual Basic for the programming language to use along with the XAML UI framework. Les premières étapes de planification de ce que vous devez faire avec vos applications existantes dépendent des types d’applications et de projets dont vous disposez.Your first steps in planning exactly what to do with your current app or apps will depend on the kinds of apps and projects you have. Cela est expliqué dans les sections suivantes.That's explained in the following sections.

Si vous disposez d’une application 8.1 universelleIf you have a Universal 8.1 app

Une application 8.1 universelle est créée à partir d’un projet d’application universelle 8.1.A Universal 8.1 app is built from an 8.1 Universal App project. Supposons que le nom du projet soit AppName _ 81.Let's say the project's name is AppName_81. Il contient les sous-projets suivants.It contains these sub-projects.

  • AppName _ 81. Windows.AppName_81.Windows. Il s’agit du projet qui crée le package d’application pour Windows 8.1.This is the project that builds the app package for Windows 8.1.
  • AppName _ 81. windowsphone.AppName_81.WindowsPhone. Il s’agit du projet qui crée le package d’application pour Windows Phone 8.1.This is the project that builds the app package for Windows Phone 8.1.
  • AppName _ 81. Shared.AppName_81.Shared. Il s’agit du projet qui contient le code source, les fichiers de balisage et d’autres actifs et ressources qui sont utilisés par les deux autres projets.This is the project that contains source code, markup files, and other assets and resources that are used by both of the other two projects.

Une application Windows universelle 8.1 offre souvent des fonctionnalités identiques—en utilisant les mêmes code et balisage—dans ses versions pour Windows 8.1 et Windows Phone 8.1.Often, an 8.1 Universal Windows app offers the same features—and does so using the same code and markup—in both its Windows 8.1 and Windows Phone 8.1 forms. Une telle application est idéalement adaptée au portage vers une application Windows 10 unique qui cible la famille d’appareils universels (et que vous pouvez installer sur le plus large éventail d’appareils).An app like that is an ideal candidate for porting to a single Windows 10 app that targets the Universal device family (and that you can install onto the widest range of devices). Vous porterez essentiellement le contenu du projet partagé et vous n’utiliserez que très peu, voire pas du tout, les deux autres projets, car ils ne contiendront qu’un nombre limité d’éléments, voire aucun.You'll essentially port the contents of the Shared project and you'll need to use little or nothing from the other two projects because there'll be little or nothing in them.

Dans d’autres cas, la version pour Windows 8.1 et/ou pour Windows Phone 8.1 de l’application contient des fonctionnalités uniques.Other times, the Windows 8.1 and/or the Windows Phone 8.1 form of the app contain unique features. Elles peuvent également contenir les mêmes fonctionnalités mais les implémenter selon des techniques ou des technologies différentes.Or they contain the same features but they implement those features using different techniques or different technology. Avec une telle application, vous pouvez choisir d’effectuer le portage vers une application unique qui cible la famille d’appareils universelle (auquel cas vous souhaiterez adapter l’application aux différents appareils) ou vers plusieurs applications, l’une d’elles ciblant la famille d’appareils de bureau et une autre ciblant la famille d’appareils mobiles, par exemple.With an app like that, you can choose to port it to a single app that targets the Universal device family (in which case you will want the app to adapt itself to different devices), or you can choose to port it as more than one app, perhaps one targeting the Desktop device family and another targeting the Mobile device family. La nature de l’application 8.1 universelle détermine l’option la mieux adaptée à votre cas.The nature of the Universal 8.1 app will determine which of these options is best for your case.

  1. Portez le contenu du projet partagé vers une application ciblant la famille d’appareils universelle.Port the contents of the Shared project to an app targeting the Universal device family. Le cas échéant, récupérez tout autre contenu des projets Windows et WindowsPhone et utilisez ce contenu de manière inconditionnelle dans l’application ou conditionnelle sur le périphérique sur lequel votre application est exécutée (ce comportement est dit adaptatif).If applicable, salvage any other content from the Windows and WindowsPhone projects, and use that content either unconditionally in the app or conditional on the device that your app happens to be running on at the time (the latter behavior is known as adaptive).
  2. Portez le contenu du projet WindowsPhone vers une application ciblant la famille de périphériques universels.Port the contents of the WindowsPhone project to an app targeting the Universal device family. Le cas échéant, récupérez tout autre contenu du projet Windows, en l’utilisant de manière inconditionnelle ou adaptative.If applicable, salvage any other content from the Windows project, using it either unconditionally or adaptively.
  3. Portez le contenu du projet Windows vers une application ciblant la famille de périphériques universels.Port the contents of the Windows project to an app targeting the Universal device family. Le cas échéant, récupérez tout autre contenu du projet WindowsPhone, en l’utilisant de manière inconditionnelle ou adaptative.If applicable, salvage any other content from the WindowsPhone project, using it either unconditionally or adaptively.
  4. Portez le contenu du projet Windows vers une application ciblant la famille de périphériques de bureau ou universels et portez également le contenu du projet WindowsPhone vers une application ciblant la famille de périphériques universels ou mobiles.Port the contents of the Windows project to an app targeting the Universal or the Desktop device family and also port the contents of the WindowsPhone project to an app targeting the Universal or the Mobile device family. Vous pouvez créer une solution avec un projet partagé et continuer à partager le code source, les fichiers de balisage et d’autres actifs et ressources entre les deux projets.You can create a solution with a Shared project, and continue to share source code, markup files, and other assets and resources between the two projects. Vous pouvez également créer différentes solutions et partager les mêmes éléments à l’aide de liens.Or, you can create different solutions and still share the same items using links.

Si vous disposez d’une application Windows 8.1If you have a Windows 8.1 app

Portez le projet vers une application ciblant la famille d’appareils universelle ou d’appareils de bureau.Port the project to an app targeting the Universal or the Desktop device family. Si vous choisissez la famille d’appareils universelle et que votre application appelle des API qui ne sont implémentées que dans la famille d’appareils de bureau, vous pouvez protéger ces appels avec du code adaptatif.If you choose the Universal device family, and your app calls APIs that are implemented only in the Desktop device family, then you can guard those calls with adaptive code.

Si vous disposez d’une application Windows Phone 8.1If you have a Windows Phone 8.1 app

Portez le projet vers une application ciblant la famille d’appareils universelle ou d’appareils mobiles.Port the project to an app targeting the Universal or the Mobile device family. Si vous choisissez la famille d’appareils universelle et que votre application appelle des API qui ne sont implémentées que dans la famille d’appareils mobiles, vous pouvez protéger ces appels avec du code adaptatif.If you choose the Universal device family, and your app calls APIs that are implemented only in the Mobile device family, then you can guard those calls with adaptive code.

Adaptation de votre application à plusieurs facteurs de formeAdapting your app to multiple form factors

L’option que vous choisissez dans les sections précédentes détermine la gamme de périphériques sur laquelle vos applications seront exécutées, ce qui peut représenter un très large éventail de périphériques.The option you choose from the previous sections will determine the range of devices that your app or apps will run on, and that may well be a very wide range of devices. Même si vous limitez votre application à la famille d’appareils mobiles, vous disposez toujours d’un large éventail de tailles d’écran à prendre en charge.Even limiting your app to the Mobile device family still leaves you with a wide range of screen sizes to support. Par conséquent, si votre application doit être exécutée sur des facteurs de forme qu’elle ne prenait pas en charge auparavant, testez votre interface utilisateur sur ces facteurs de forme et apportez les modifications nécessaires pour qu’elle s’adapte à chacun d’eux de manière appropriée.So, if your app will be running on form factors that it didn't formerly support, then test your UI on those form factors and make any change necessary, so that your UI adapts appropriately on each. Vous pouvez considérer qu’il s’agit d’une tâche de post-portage, ou d’un redimensionnement du portage, et vous en trouverez quelques exemples pratiques dans les études de cas Bookstore2 et QuizGame.You can think of this is a post-porting task, or a porting stretch-goal, and there are some examples of it in practice in the Bookstore2 and QuizGame case studies.

Méthode de portage couche par coucheApproaching porting layer-by-layer

Lors du portage d’une application 8.1 universelle vers le modèle d’application UWP, quasiment toutes vos expériences et connaissances sont transférées, tout comme la majeure partie de votre code source, du balisage et des modèles de logiciels que vous utilisez.When porting a Universal 8.1 app to the model for UWP apps, virtually all of your knowledge and experience will transfer, as will most of your source code and markup and the software patterns you use.

  • Affichage.View. L’affichage (ainsi que le modèle d’affichage) constitue l’interface utilisateur de votre application.The view (together with the view model) makes up your app's UI. Dans l’idéal, l’affichage se compose de balises liées aux propriétés observables d’un modèle d’affichage.Ideally, the view consists of markup bound to observable properties of a view model. Une autre méthode (courante et pratique, mais uniquement sur le court terme) consiste à faire en sorte que le code impératif d’un fichier code-behind manipule directement des éléments de l’interface utilisateur.Another pattern (common and convenient, but only in the short term) is for imperative code in a code-behind file to directly manipulate UI elements. Dans les deux cas, le balisage et la conception de votre interface utilisateur (et même le code impératif qui manipule les éléments de l’interface utilisateur) se révéleront simples à porter.In either case, your UI markup and design—and even imperative code that manipulates UI elements—will be straightforward to port.
  • Modèles d’affichage et modèles de données.View models and data models. Même si vous n’adoptez pas pleinement les modèles avec séparation des responsabilités (comme MVVM), il existe inévitablement du code dans votre application, qui joue le rôle de modèle d’affichage et de modèle de données.Even if you don't formally embrace separation-of-concerns patterns (such as MVVM), there is inevitably code present in your app that performs the function of view model and data model. Le code du modèle d’affichage utilise des types dans les espaces de noms de l’infrastructure de l’interface utilisateur.View model code makes use of types in the UI framework namespaces. Le modèle de données et le modèle d’affichage exploitent également un système d’exploitation non visuel, ainsi que des API .NET Framework (y compris les API d’accès aux données).Both view model and data model code also use non-visual operating system and .NET Framework APIs (including APIs for data-access). Ces API sont également disponibles pour les applications UWP de sorte que la majeure partie de ce code, si ce n’est l’intégralité, pourra être portée sans modification.And those APIs are available for UWP apps, too, so most if not all of this code will port without change.
  • Services Cloud.Cloud services. Il est probable que certains éléments de votre application (peut-être la plus grande partie) s’exécutent sur le cloud, sous la forme de services.It's likely that some of your app (perhaps a great deal of it) runs in the cloud in the form of services. La partie de l’application qui s’exécute sur l’appareil du client se connecte à ces services.The part of the app running on the client device connects to those. Il s’agit de la partie d’une application distribuée qui a de grandes chances de rester intacte lors du portage de la partie destinée au client.This is the part of a distributed app most likely to remain unchanged when porting the client part. Si vous n’avez pas encore envisagé cette possibilité, nous vous recommandons d’opter pour des services de cloud computing pour votre application UWP. Ainsi, Microsoft Azure Mobile Services propose des composants principaux puissants et efficaces que votre application peut appeler pour bénéficier de services allant de la simple notification de mise à jour des vignettes dynamiques aux différentes fonctions d’évolutivité ultra-puissantes offertes par une batterie de serveurs.If you don't already have one, a good cloud services option for your UWP app is Microsoft Azure Mobile Services, which provides powerful back-end components that your app can call for services ranging from simple notifications for live tiles updates up to the kind of heavy-lifting scalability a server farm can provide.

Avant ou pendant le portage, vérifiez si vous pouvez améliorer votre application en la refactorisant, afin de regrouper l’ensemble du code présentant une finalité similaire sous la forme de couches, ce qui vous permet d’éviter toute répartition arbitraire.Before or during the porting, consider whether your app could be improved by refactoring it so that code with a similar purpose is gathered together in layers and not scattered arbitrarily. La factorisation de votre application en couches comme celles que nous venons de décrire vous permet de vous assurer que votre application est correcte, de la tester, de l’exécuter et de l’entretenir, en toute simplicité.Factoring your app into layers like those described above makes it easier for you to make your app correct, to test it, and then subsequently to read and maintain it. Vous pouvez rendre des fonctionnalités plus réutilisables en suivant le modèle Model-View-ViewModel (MVVM).You can make functionality more reusable by following the Model-View-ViewModel (MVVM) pattern. Ce modèle gère de manière séparée les éléments de l’interface utilisateur, les composants professionnels et les données.This pattern keeps the data, business, and UI parts of your app separate from one another. Même au sein de l’interface utilisateur, ce modèle peut séparer les états et les comportements des éléments visuels, qui seront testés séparément.Even within the UI it can keep state and behavior separate, and separately testable, from the visuals. Grâce au modèle MVVM, vous pouvez écrire vos données et votre logique métier une seule fois et l’utiliser sur tous les appareils, quelle que soit l’interface utilisateur.With MVVM, you can write your data and business logic once and use it on all devices no matter the UI. En outre, ce modèle vous permettra probablement de réutiliser la majeure partie du modèle d’affichage et des zones d’affichage sur l’ensemble des appareils.It's likely that you'll be able to re-use much of the view model and view parts across devices, too.

RubriqueTopic DescriptionDescription
Portage du projetPorting the project Lorsque vous commencez le processus de portage, vous avez le choix entre deux options.You have two options when you begin the porting process. La première consiste à modifier une copie de vos fichiers de projet existants, y compris le manifeste de package d’application (pour cette option, voir les informations sur la mise à jour de vos fichiers de projet dans Migrer des applications vers la plateforme Windows universelle).One is to edit a copy of your existing project files, including the app package manifest (for that option, see the info about updating your project files in Migrate apps to the Universal Windows Platform (UWP)). La seconde consiste à créer un projet Windows 10 dans Visual Studio et à copier vos fichiers dans ce projet.The other option is to create a new Windows 10 project in Visual Studio and copy your files into it.
DépannageTroubleshooting Nous vous recommandons vivement de lire ce guide de portage jusqu’à la fin, mais nous comprenons également que vous soyez impatient d’avancer et de passer à l’étape de développement et d’exécution de votre projet.We highly recommend reading to the end of this porting guide, but we also understand that you're eager to forge ahead and get to the stage where your project builds and runs. À cette fin, vous pouvez avancer provisoirement en commentant ou en remplaçant du code non essentiel, pour revenir ensuite afin de combler cette lacune ultérieurement.To that end, you can make temporary progress by commenting or stubbing out any non-essential code, and then returning to pay off that debt later. Le tableau de résolution des problèmes et des solutions de cette rubrique peuvent vous être utiles à ce stade, même s’il ne se substitue pas à la lecture des rubriques suivantes.The table of troubleshooting symptoms and remedies in this topic may be helpful to you at this stage, although it's not a substitute for reading the next few topics. Vous pouvez toujours revenir au tableau lorsque vous avancez dans les rubriques ultérieures.You can always refer back to the table as you progress through the later topics.
Portage du balisage XAML et de la couche interface utilisateurPorting XAML and UI La pratique de définition de l’interface utilisateur sous la forme de balisage XAML déclaratif convertit extrêmement bien des applications 8.1 universelles en applications de plateforme Windows universelle (UWP).The practice of defining UI in the form of declarative XAML markup translates extremely well from Universal 8.1 apps to UWP apps. Vous constaterez que la majeure partie de votre balisage est compatible, même si vous devez peut-être apporter quelques ajustements aux clés de ressources système ou aux modèles personnalisés que vous utilisez.You'll find that most of your markup is compatible, although you may need to make some adjustments to the system Resource keys or custom templates that you're using.
Portage pour le modèle d’E/S, d’appareil et d’applicationPorting for I/O, device, and app model Le code qui s’intègre à l’appareil proprement dit et à ses capteurs implique des entrées de l’utilisateur et des sorties vers ce dernier.Code that integrates with the device itself and its sensors involves input from, and output to, the user. Il peut également impliquer le traitement des données.It can also involve processing data. Néanmoins, ce code n’est généralement pas pensé comme la couche interface utilisateur ni comme la couche de données.But, this code is not generally thought of as either the UI layer or the data layer. Ce code inclut l’intégration au contrôleur de vibrations, à l’accéléromètre, au gyroscope, au microphone et au haut-parleur (qui rejoignent la reconnaissance et la synthèse vocales), à la (géo)localisation et aux modalités d’entrée telles que l’écran tactile, la souris, le clavier et le stylet.This code includes integration with the vibration controller, accelerometer, gyroscope, microphone and speaker (which intersect with speech recognition and synthesis), (geo)location, and input modalities such as touch, mouse, keyboard, and pen.
Étude de cas : Bookstore1Case study: Bookstore1 Cette rubrique présente une étude de cas illustrant le portage d’une application 8.1 universelle très simple vers une application UWP Windows 10.This topic presents a case study of porting a very simple Universal 8.1 app to a Windows 10 UWP app. Une application 8.1 universelle génère un package d’application pour Windows 8.1 et un autre pour Windows Phone 8.1.A Universal 8.1 app is one that builds one app package for Windows 8.1, and a different app package for Windows Phone 8.1. Grâce à Windows 10, vous pouvez créer un package d’application unique que vos clients peuvent installer sur un large éventail d’appareils. C’est ce que nous allons faire dans la présente étude de cas.With Windows 10, you can create a single app package that your customers can install onto a wide range of devices, and that's what we'll do in this case study. Voir le Guide des applications UWP.See Guide to UWP apps.
Étude de cas : Bookstore2Case study: Bookstore2 Cette étude de cas repose sur les informations fournies dans le contrôle SemanticZoom.This case study—which builds on the info given in SemanticZoom control. Dans le modèle d’affichage, chaque instance de la classe Author représente l’ensemble des livres écrits par l’auteur en question ; dans l’élément SemanticZoom, nous pouvons afficher la liste des livres regroupés par auteur ou nous pouvons effectuer un zoom arrière pour afficher une liste de raccourcis relatifs aux auteurs.In the view model, each instance of the class Author represents the group of the books written by that author, and in the SemanticZoom, we can either view the list of books grouped by author or we can zoom out to see a jump list of authors.
Étude de cas : QuizGameCase study: QuizGame Cette rubrique présente une étude de cas illustrant le portage d’un exemple d’application de jeu-questionnaire WinRT 8.1 d’homologue à homologue vers une application de plateforme Windows universelle (UWP) Windows 10.This topic presents a case study of porting a functioning peer-to-peer quiz game WinRT 8.1 sample app to a Windows 10 UWP app.

DocumentationDocumentation