Passer d’une application de bureau à UWPMove from a desktop application to UWP

Si vous disposez d’une application de bureau existante qui a été créée à l’aide de l' .NET Framework (y compris les API WPF et Windows Forms) ou C++ Win32, vous avez plusieurs options pour passer au plateforme Windows universelle (UWP) et à Windows 10.If you have an existing desktop application that was built using the .NET Framework (including WPF and Windows Forms) or C++ Win32 APIs, you have several options for moving to the Universal Windows Platform (UWP) and Windows 10.

Empaqueter votre application de bureau dans un package MSIXPackage your desktop application in an MSIX package

Vous pouvez empaqueter votre application de bureau dans un package MSIX pour accéder à de nombreuses autres fonctionnalités Windows 10.You can package your desktop application in an MSIX package to get access to many more Windows 10 features. MSIX est un format de package d’application Windows moderne qui permet de créer des packages universels pour toutes les applications Windows, notamment les applications UWP, WPF, Windows Forms et Win32.MSIX is a modern Windows app package format that provides a universal packaging experience for all Windows apps, including UWP, WPF, Windows Forms and Win32 apps. En empaquetant vos applications de bureau Windows dans des packages MSIX, vous avez accès à une expérience d’installation et de mise à jour fiable, à un modèle de sécurité managé avec un système de capacité flexible, à un support pour le Microsoft Store, à la gestion d’entreprise et à de nombreux modèles de distribution personnalisés.Packaging your desktop Windows apps in MSIX packages gets you access to a robust installation and updating experience, a managed security model with a flexible capability system, support for the Microsoft Store, enterprise management, and many custom distribution models. Vous pouvez empaqueter votre application si vous avez le code source ou si vous disposez uniquement d’un fichier d’installation existant (par exemple, un programme d’installation MSI ou App-V).You can package your application whether you have the source code or if you only have an existing installer file (such as an MSI or App-V installer). Une fois votre application empaquetée, vous pouvez intégrer des fonctionnalités UWP telles que les extensions de package et d’autres composants UWP.After you package your application, you can integrate UWP features such as package extensions and other UWP components.

Pour plus d’informations, consultez package Desktop applications (Desktop Bridge) et les fonctionnalités qui requièrent l’identité du package.For more information, see Package desktop applications (Desktop Bridge) and Features that require package identity.

Utiliser des API Windows RuntimeUse Windows Runtime APIs

Vous pouvez appeler de nombreuses API Windows Runtime directement dans votre application de bureau WPF, Windows Forms ou Win32 C++ afin d’apporter aux utilisateurs de Windows 10 des expériences modernes.You can call many Windows Runtime APIs directly in your WPF, Windows Forms, or C++ Win32 desktop app to integrate modern experiences that light up for Windows 10 users. Par exemple, vous pouvez appeler des API Windows Runtime pour ajouter des notifications toast à votre application de bureau.For example, you can call Windows Runtime APIs to add toast notifications to your desktop app.

Pour plus d’informations, consultez Utiliser des API Windows Runtime dans les applications de bureau.For more information, see Use Windows Runtime APIs in desktop apps.

Migrer une application .NET Framework vers une application UWPMigrate a .NET Framework app to a UWP app

Si votre application s’exécute sur le .NET Framework, vous pouvez la migrer vers une application UWP en tirant parti de .NET Standard 2,0.If your application runs on the .NET Framework, you can migrate it to a UWP app by leveraging .NET Standard 2.0. Déplacez autant de code que possible dans .NET Standard bibliothèques de classes 2,0, puis créez une application UWP qui référence vos bibliothèques .NET Standard 2,0.Move as much code as you can into .NET Standard 2.0 class libraries, and then create a UWP app that references your .NET Standard 2.0 libraries.

Partager du code dans une bibliothèque .NET Standard 2,0Share code in a .NET Standard 2.0 library

Si votre application s’exécute sur le .NET Framework, placez autant de code que possible dans .NET Standard bibliothèques de classes 2,0.If your application runs on the .NET Framework, place as much code as you can into .NET Standard 2.0 class libraries. Tant que votre code utilise des API définies dans le standard, vous pouvez le réutiliser dans une application UWP.As long as your code uses APIs that are defined in the standard, you can reuse it in a UWP app. Il est plus facile que jamais de partager du code dans une bibliothèque .NET Standard, car de nombreuses API supplémentaires sont incluses dans le .NET Standard 2,0.It's easier than it's ever been to share code in a .NET Standard library because so many more APIs are included in the .NET Standard 2.0.

Voici une vidéo qui vous en dit davantage.Here's a video that tells you more about it.

Ajouter des bibliothèques de .NET StandardAdd .NET Standard libraries

Tout d’abord, ajoutez une ou plusieurs bibliothèques de classes .NET Standard à votre solution.First, add one or more .NET Standard class libraries to your solution.

Ajouter un projet standard dotnet

Le nombre de bibliothèques que vous ajoutez à votre solution dépend de la façon dont vous planifiez l’organisation de votre code.The number of libraries that you add to your solution depends on how you plan to organize your code.

Assurez-vous que chaque bibliothèque de classes cible le .NET Standard 2,0.Make sure that each class library targets the .NET Standard 2.0.

.NET Standard cible 2,0

Ce paramètre se trouve dans les pages de propriétés du projet de bibliothèque de classes.You can find this setting in the property pages of the class library project.

À partir de votre projet d’application de bureau, ajoutez une référence au projet de bibliothèque de classes.From your desktop application project, add a reference to the class library project.

Capture d’écran du volet Explorateur de solutions qui appelle la référence de la bibliothèque de classes pour le projet point NET.

Ensuite, utilisez les outils pour déterminer la quantité de code conforme à la norme.Next, use tools to determine how much of your code conforms to the standard. De cette façon, avant de déplacer du code dans la bibliothèque, vous pouvez choisir les parties que vous pouvez réutiliser, les parties qui nécessitent une modification minimale et les parties qui resteront spécifiques à l’application.That way, before you move code into the library, you can decide which parts you can reuse, which parts require minimal modification, and which parts will remain application-specific.

Vérifier la compatibilité de la bibliothèque et du codeCheck library and code compatibility

Nous allons commencer par des packages NuGet et d’autres fichiers dll obtenus auprès d’un tiers.We'll start with Nuget Packages and other dll files that you obtained from a third party.

Si votre application utilise l’une d’elles, déterminez si elles sont compatibles avec le .NET Standard 2,0.If your application uses any of them, determine if they are compatible with the .NET Standard 2.0. Pour ce faire, vous pouvez utiliser une extension Visual Studio ou un utilitaire de ligne de commande.You can use a Visual Studio extension or a command-line utility to do that.

Utilisez ces mêmes outils pour analyser votre code.Use these same tools to analyze your code. Téléchargez les outils ici (dotnet-apiport), puis regardez cette vidéo pour apprendre à les utiliser.Download the tools here (dotnet-apiport) and then watch this video to learn how to use them.   

Si votre code n’est pas compatible avec la norme, pensez à d’autres façons d’implémenter ce code.If your code isn't compatible with the standard, consider other ways that you could implement that code. Commencez par ouvrir le navigateur de l’API .net.Start by opening the .NET API Browser. Vous pouvez utiliser ce navigateur pour passer en revue les API disponibles dans le .NET Standard 2,0.You can use that browser to review the API's that are available in the .NET Standard 2.0. Veillez à étendre la liste à la .NET Standard 2,0.Make sure to scope the list to the .NET Standard 2.0.

point net (option)

Une partie de votre code sera spécifique à la plateforme et devra rester dans votre projet d’application de bureau.Some of your code will be platform-specific and will need to remain in your desktop application project.

Exemple : migration du code d’accès aux données vers une bibliothèque .NET Standard 2,0Example: Migrating data access code to a .NET Standard 2.0 library

Supposons que nous disposons d’une application Windows Forms de base qui montre les clients de notre exemple de base de données Northwind.Let's assume that we have a very basic Windows Forms application that shows customers from our Northwind sample database.

Application Windows Forms

Le projet contient une bibliothèque de classes .NET Standard 2,0 avec une classe statique nommée Northwind.The project contains a .NET Standard 2.0 class library with a static class named Northwind. Si nous déplaçons ce code dans la classe Northwind , il ne sera pas compilé, car il utilise les SQLConnection SqlCommand classes, et SqlDataReader , ainsi que les classes qui ne sont pas disponibles dans le .NET standard 2,0.If we move this code into the Northwind class, it won't compile because it uses the SQLConnection, SqlCommand, and SqlDataReader classes, and those classes that are not available in the .NET Standard 2.0.

public static ArrayList GetCustomerNames()
{
    ArrayList customers = new ArrayList();

    using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString =
            @"Data Source=" +
            @"<Your Server Name>\SQLEXPRESS;Initial Catalog=NORTHWIND;Integrated Security=SSPI";

        conn.Open();

        SqlCommand command = new SqlCommand("select ContactName from customers order by ContactName asc", conn);

        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                customers.Add(reader[0]);
            }
        }
    }

    return customers;
}

Nous pouvons utiliser le navigateur de l’API .net pour trouver une alternative.We can use the .NET API Browser to find an alternative though. Les DbConnection DbCommand classes, et DbDataReader sont toutes disponibles dans le .NET standard 2,0 afin de pouvoir les utiliser à la place.The DbConnection, DbCommand, and DbDataReader classes are all available in the .NET Standard 2.0 so we can use them instead.

Cette version révisée utilise ces classes pour obtenir une liste de clients, mais pour créer une DbConnection classe, nous devrons passer un objet de fabrique que nous créons dans l’application cliente.This revised version uses those classes to get a list of customers, but to create a DbConnection class, we'll need to pass in a factory object that we create in the client application.

public static ArrayList GetCustomerNames(DbProviderFactory factory)
{
    ArrayList customers = new ArrayList();

    using (DbConnection conn = factory.CreateConnection())
    {
        conn.ConnectionString = @"Data Source=" +
                        @"<Your Server Name>\SQLEXPRESS;Initial Catalog=NORTHWIND;Integrated Security=SSPI";

        conn.Open();

        DbCommand command = factory.CreateCommand();
        command.Connection = conn;
        command.CommandText = "select ContactName from customers order by ContactName asc";

        using (DbDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                customers.Add(reader[0]);
            }
        }
    }

    return customers;
}

Dans la page code-behind du Windows Form, nous pouvons simplement créer l’instance Factory et la passer à notre méthode.In the code-behind page of the Windows Form, we can just create factory instance and pass it into our method.

public partial class Customers : Form
{
    public Customers()
    {
        InitializeComponent();

        dataGridView1.Rows.Clear();

        SqlClientFactory factory = SqlClientFactory.Instance;

        foreach (string customer in Northwind.GetCustomerNames(factory))
        {
            dataGridView1.Rows.Add(customer);
        }
    }
}

Créer une application UWPCreate a UWP app

Vous êtes maintenant prêt à ajouter une application UWP à votre solution.Now you're ready to add a UWP app to your solution.

image de bureau vers un pont UWP

Vous devez toujours concevoir des pages d’interface utilisateur en XAML et écrire du code spécifique à une plateforme ou un appareil, mais lorsque vous avez terminé, vous pourrez atteindre l’intégralité des appareils Windows 10 et vos pages d’application auront une apparence moderne qui s’adapte parfaitement à différentes tailles et résolutions d’écran.You'll still have to design UI pages in XAML and write any device or platform-specific code, but when you are done, you'll be able to reach the full breadth of Windows 10 devices and your app pages will have a modern feel that adapts well to different screen sizes and resolutions.

Votre application répondra aux mécanismes d’entrée autres qu’un clavier et une souris, et les fonctionnalités et les paramètres seront intuitifs sur les appareils.Your app will respond to input mechanisms other than just a keyboard and mouse, and features and settings will be intuitive across devices. Cela signifie que les utilisateurs apprennent à effectuer des tâches une seule fois, puis il fonctionne de façon très familière, quel que soit l’appareil.This means that users learn how to do things one time, and then it works in a very familiar way no matter the device.

Il ne s’agit là que de quelques-unes des bonnes choses qui accompagnent UWP.These are just a few of the goodies that come with UWP. Pour plus d’informations, consultez créer des expériences exceptionnelles avec Windows.To learn more, see Build great experiences with Windows.

Ajouter un projet UWPAdd a UWP project

Tout d’abord, ajoutez un projet UWP à votre solution.First, add a UWP project to your solution.

Projet UWP

Ensuite, à partir de votre projet UWP, ajoutez une référence au projet de bibliothèque .NET Standard 2,0.Then, from your UWP project, add a reference the .NET Standard 2.0 library project.

Capture d’écran du volet de Explorateur de solutions UWP qui appelle la référence à la référence de la bibliothèque de classes pour le projet DOT NET.

Créer vos pagesBuild your pages

Ajoutez des pages XAML et appelez le code dans votre bibliothèque .NET Standard 2,0.Add XAML pages and call the code in your .NET Standard 2.0 library.

Application UWP

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel x:Name="customerStackPanel">
        <ListView x:Name="customerList"/>
    </StackPanel>
</Grid>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        SqlClientFactory factory = SqlClientFactory.Instance;

        customerList.ItemsSource = Northwind.GetCustomerNames(factory);
    }
}

Pour commencer à utiliser UWP, voir qu’est-ce qu’une application UWP ?To get started with UWP, see What's a UWP app.

Atteindre des appareils iOS et AndroidReach iOS and Android devices

Vous pouvez atteindre des appareils Android et iOS en ajoutant des projets Xamarin.You can reach Android and iOS devices by adding Xamarin projects.

Image qui montre un appareil Android et un appareil i O S affichant des applications Xamarin.

Ces projets vous permettent d’utiliser C# pour créer des applications Android et iOS avec un accès complet aux API spécifiques aux plateformes et aux appareils.These projects let you use C# to build Android and iOS apps with full access to platform-specific and device-specific APIs. Ces applications tirent parti de l’accélération matérielle spécifique à la plateforme et sont compilées pour les performances natives.These apps leverage platform-specific hardware acceleration, and are compiled for native performance.

Ils ont accès à la gamme complète des fonctionnalités exposées par la plateforme et l’appareil sous-jacents, y compris les fonctionnalités spécifiques à la plateforme comme qu’ibeacons et les fragments Android. vous utiliserez des contrôles d’interface utilisateur natif standard pour créer des interfaces utilisateur qui ressemblent à la façon dont les utilisateurs les attendent.They have access to the full spectrum of functionality exposed by the underlying platform and device, including platform-specific capabilities like iBeacons and Android Fragments and you'll use standard native user interface controls to build UIs that look and feel the way that users expect them to.

Tout comme UWPs, le coût d’ajout d’une application Android ou iOS est plus faible, car vous pouvez réutiliser la logique métier dans une bibliothèque de classes .NET Standard 2,0.Just like UWPs, the cost to add an Android or iOS app is lower because you can reuse business logic in a .NET Standard 2.0 class library. Vous devez concevoir vos pages d’interface utilisateur en XAML et écrire du code spécifique à une plateforme ou un appareil.You'll have to design your UI pages in XAML and write any device or platform-specific code.

Ajouter un projet XamarinAdd a Xamarin project

Tout d’abord, ajoutez un projet Android, iOSou multiplateforme à votre solution.First, add an Android, iOS, or Cross-Platform project to your solution.

Ces modèles se trouvent dans la boîte de dialogue Ajouter un nouveau projet , sous le groupe Visual C# .You can find these templates in the Add New Project dialog box under the Visual C# group.

Capture d’écran de la boîte de dialogue Ajouter un nouveau projet, qui indique les options d’installation de l' > Visual C Sharp et Android, Cross Platform et i O S.

Notes

Les projets multiplateformes sont très utiles pour les applications avec peu de fonctionnalités spécifiques à la plateforme.Cross-platform projects are great for apps with little platform-specific functionality. Vous pouvez les utiliser pour créer une interface utilisateur XAML native qui s’exécute sur iOS, Android et Windows.You can use them to build one native XAML-based UI that runs on iOS, Android, and Windows. Pour en savoir plus, cliquez ici.Learn more here.

Ensuite, à partir de votre projet Android, iOS ou multiplateforme, ajoutez une référence au projet de bibliothèque de classes.Then, from your Android, iOS, or cross-platform project, add a reference the class library project.

Capture d’écran du volet de Explorateur de solutions qui appelle la référence de la bibliothèque de classes pour le projet Android, i O S ou multiplateforme.

Créer vos pagesBuild your pages

Notre exemple montre une liste de clients dans une application Android.Our example shows a list of customers in an Android app.

Application Android

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp" android:textSize="16sp"
    android:id="@android:id/list">
</TextView>
[Activity(Label = "MyAndroidApp", MainLauncher = true)]
public class MainActivity : ListActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SqlClientFactory factory = SqlClientFactory.Instance;

        var customers = (string[])Northwind.GetCustomerNames(factory).ToArray(typeof(string));

        ListAdapter = new ArrayAdapter<string>(this, Resource.Layout.list_item, customers);
    }
}

Pour vous familiariser avec les projets Android, iOS et multiplateforme, consultez le portail des développeurs Xamarin.To get started with Android, iOS, and cross-platform projects, see the Xamarin developer portal.

Étapes suivantesNext steps

Trouvez les réponses à vos questionsFind answers to your questions

Des questions ?Have questions? Contactez-nous sur Stack Overflow.Ask us on Stack Overflow. Notre équipe supervise ces étiquettes.Our team monitors these tags. Vous pouvez également nous poser vos questions ici.You can also ask us here.

Envoyer des commentaires ou apporter des suggestions de fonctionnalitésGive feedback or make feature suggestions

Consultez UserVoice.See UserVoice.