Passer d’une application de bureau à UWP

Si vous avez une application de bureau existante qui a été créée à l’aide des API .NET Framework (y compris WPF et Windows Forms) ou C++ Win32, vous disposez de plusieurs options pour passer à l’plateforme Windows universelle (UWP) et Windows 10/11.

Empaqueter votre application de bureau dans un package MSIX

Vous pouvez empaqueter votre application de bureau dans un package MSIX pour accéder à de nombreuses fonctionnalités Windows 10 et Windows 11. 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. 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. Vous pouvez empaqueter votre application, que vous disposiez du code source ou que vous disposiez uniquement d’un fichier de programme d’installation existant (par exemple, un programme d’installation MSI ou App-V). Après avoir empaqueté votre application, vous pouvez intégrer des fonctionnalités UWP telles que les extensions de package et d’autres composants UWP.

Pour plus d’informations, consultez Génération d’un package MSIX à partir de votre code et des fonctionnalités qui nécessitent une identité de package.

Utiliser les API Windows Runtime

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. Par exemple, vous pouvez appeler des API Windows Runtime pour ajouter des notifications toast à votre application de bureau.

Pour plus d’informations, consultez Utiliser des API Windows Runtime dans les applications de bureau.

Migrer une application .NET Framework vers une application UWP

Si votre application s’exécute sur .NET Framework, vous pouvez la migrer vers une application UWP en tirant parti de .NET Standard 2.0. Déplacez autant de code que possible dans les bibliothèques de classes .NET Standard 2.0, puis créez une application UWP qui référence vos bibliothèques .NET Standard 2.0.

Partager du code dans une bibliothèque .NET Standard 2.0

Si votre application s’exécute sur .NET Framework, placez autant de code que possible dans les bibliothèques de classes .NET Standard 2.0. Tant que votre code utilise des API définies dans la norme, vous pouvez le réutiliser dans une application UWP. Il est plus facile que jamais de partager du code dans une bibliothèque .NET Standard, car beaucoup plus d’API sont incluses dans .NET Standard 2.0.

Voici une vidéo qui vous en dit plus.

Ajouter des bibliothèques .NET Standard

Tout d’abord, ajoutez une ou plusieurs bibliothèques de classes .NET Standard à votre solution.

Ajouter un projet dotnet standard

Le nombre de bibliothèques que vous ajoutez à votre solution dépend de la façon dont vous prévoyez d’organiser votre code.

Assurez-vous que chaque bibliothèque de classes cible . NET Standard 2.0.

Cible .NET Standard 2.0

Vous trouverez ce paramètre dans les pages de propriétés du projet de bibliothèque de classes.

À partir de votre projet d’application de bureau, ajoutez une référence au projet de bibliothèque de classes.

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

Ensuite, utilisez des outils pour déterminer la quantité de votre code conforme à la norme. De cette façon, avant de déplacer du code dans la bibliothèque, vous pouvez décider quelles parties vous pouvez réutiliser, quelles parties nécessitent une modification minimale et quelles parties resteront spécifiques à l’application.

Vérifier la compatibilité de la bibliothèque et du code

Nous allons commencer par les packages Nuget et d’autres fichiers dll que vous avez obtenus auprès d’un tiers.

Si votre application utilise l’un d’eux, déterminez s’il est compatible avec .NET Standard 2.0. Pour ce faire, vous pouvez utiliser une extension Visual Studio ou un utilitaire de ligne de commande.

Utilisez ces mêmes outils pour analyser votre code. Téléchargez les outils ici (dotnet-apiport), puis watch cette vidéo pour apprendre à les utiliser.  

Si votre code n’est pas compatible avec la norme, envisagez d’autres façons d’implémenter ce code. Commencez par ouvrir l’explorateur d’API .NET. Vous pouvez utiliser ce navigateur pour passer en revue les API disponibles dans .NET Standard 2.0. Veillez à étendre la liste à .NET Standard 2.0.

Option dot net

Une partie de votre code sera spécifique à la plateforme et devra rester dans votre projet d’application de bureau.

Exemple : Migration du code d’accès aux données vers une bibliothèque .NET Standard 2.0

Supposons que nous disposons d’une application Windows Forms très simple qui montre les clients de notre exemple de base de données Northwind.

Application Windows Forms

Le projet contient une bibliothèque de classes .NET Standard 2.0 avec une classe statique nommée Northwind. Si nous déplaçons ce code dans la classe Northwind , il ne sera pas compilé, car il utilise les SQLConnectionclasses , SqlCommandet SqlDataReader et les classes qui ne sont pas disponibles dans .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 cependant utiliser l’explorateur d’API .NET pour trouver une alternative. Les DbConnectionclasses , DbCommandet DbDataReader sont toutes disponibles dans .NET Standard 2.0. Nous pouvons donc les utiliser à la place.

Cette version révisée utilise ces classes pour obtenir une liste de clients, mais pour créer une DbConnection classe, nous devons passer un objet de fabrique que nous créons dans l’application cliente.

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 des instance de fabrique et les transmettre à notre méthode.

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 UWP

Vous êtes maintenant prêt à ajouter une application UWP à votre solution.

image pont de bureau à UWP

Vous devrez toujours concevoir des pages d’interface utilisateur en XAML et écrire du code spécifique à l’appareil ou à la plateforme, mais lorsque vous avez terminé, vous serez en mesure d’atteindre l’étendue complète de Windows 10 et Windows 11 appareils, et vos pages d’application auront une sensation moderne qui s’adapte bien aux différentes tailles d’écran et résolutions.

Votre application répond à des mécanismes d’entrée autres qu’un simple clavier et souris, et les fonctionnalités et les paramètres seront intuitifs sur tous les appareils. Cela signifie que les utilisateurs apprennent à faire les choses une fois, puis que cela fonctionne de manière très familière, quel que soit l’appareil.

Ce ne sont que quelques-uns des goodies qui viennent avec UWP. Pour plus d’informations, consultez Créer d’excellentes expériences avec Windows.

Ajouter un projet UWP

Tout d’abord, ajoutez un projet UWP à votre solution.

Projet UWP

Ensuite, à partir de votre projet UWP, ajoutez une référence au projet de bibliothèque .NET Standard 2.0.

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

Créer vos pages

Ajoutez des pages XAML et appelez le code dans votre bibliothèque .NET Standard 2.0.

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, consultez Présentation d’une application UWP.

Atteindre les appareils iOS et Android

Vous pouvez accéder aux appareils Android et iOS en ajoutant des projets Xamarin.

Notes

Pour les nouveaux projets multiplateformes, envisagez d’utiliser .NET MAUI.

Image montrant 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 à la plateforme et à l’appareil. Ces applications tirent parti de l’accélération matérielle propre à la plateforme et sont compilées pour des performances natives.

Ils ont accès à l’ensemble des fonctionnalités exposées par la plateforme et l’appareil sous-jacents, y compris les fonctionnalités spécifiques à la plateforme telles que iBeacons et Fragments Android, et vous utiliserez des contrôles d’interface utilisateur natifs standard pour créer des interfaces utilisateur qui ressemblent à ce que les utilisateurs attendent d’eux.

Tout comme les UWPs, le coût d’ajout d’une application Android ou iOS est inférieur, car vous pouvez réutiliser la logique métier dans une bibliothèque de classes .NET Standard 2.0. Vous devrez concevoir vos pages d’interface utilisateur en XAML et écrire tout code spécifique à l’appareil ou à la plateforme.

Ajouter un projet Xamarin

Tout d’abord, ajoutez un projet Android, iOS ou multiplateforme à votre solution.

Vous trouverez ces modèles dans la boîte de dialogue Ajouter un nouveau projet sous le groupe Visual C# .

Capture d’écran de la boîte de dialogue Ajouter un nouveau projet montrant installé > Visual C sharp sélectionné et les options Android, Cross Platform et i O S mises en évidence.

Notes

Les projets multiplateformes sont parfaits pour les applications avec peu de fonctionnalités spécifiques à la plateforme. Vous pouvez les utiliser pour créer une interface utilisateur XAML native qui s’exécute sur iOS, Android et Windows. En savoir plus ici.

Ensuite, à partir de votre projet Android, iOS ou multiplateforme, ajoutez une référence au projet de bibliothèque de classes.

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

Créer vos pages

Notre exemple montre une liste de clients dans une application Android.

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 commencer à utiliser des projets Android, iOS et multiplateformes, consultez le portail des développeurs Xamarin.

Étapes suivantes

Trouvez les réponses à vos questions

Des questions ? Contactez-nous sur Stack Overflow. Notre équipe supervise ces étiquettes. Vous pouvez également nous poser vos questions ici.