Passer d’une application de bureau à UWP
Si vous disposez d’une application de bureau existante qui a été créée à l’aide du .NET Framework (y compris WPF et Windows Forms) ou des API Win32 C++, vous disposez de plusieurs options pour passer aux api 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 ayez le code source ou si vous disposez uniquement d’un fichier d’installation existant (par exemple, un programme d’installation MSI ou App-V). Après avoir empaqueter votre application, vous pouvez intégrer des fonctionnalités UWP telles que des extensions de package et d’autres composants UWP.
Pour plus d’informations, consultez Création d’un package MSIX à partir de votre code et 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 vous pouvez 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 vous pouvez dans les bibliothèques de classes .NET Standard 2.0. Tant que votre code utilise des API définies dans la norme, vous pouvez la réutiliser dans une application UWP. 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 .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.
Le nombre de bibliothèques que vous ajoutez à votre solution dépend de la façon dont vous envisagez d’organiser votre code.
Assurez-vous que chaque bibliothèque de classes cible le .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.
Ensuite, utilisez des outils pour déterminer la quantité de votre code conforme à la norme. Ainsi, 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 à partir d’un tiers.
Si votre application les utilise, déterminez s’ils sont compatibles avec .NET Standard 2.0. Vous pouvez utiliser une extension Visual Studio ou un utilitaire de ligne de commande pour ce faire.
Utilisez ces mêmes outils pour analyser votre code. Téléchargez les outils ici (dotnet-apiport), puis regardez 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 le navigateur 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.
Certains de vos codes seront spécifiques à la plateforme et devront 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 aux clients de notre exemple de base de données Northwind.
Le projet contient une bibliothèque de classes .NET Standard 2.0 avec une classe statique nommée Northwind. Si nous passons ce code à la classe Northwind , il ne sera pas compilé car il utilise les SQLConnection
classes , SqlCommand
et SqlDataReader
celles 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 = ...; // Your connection string goes here.
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 d’API .NET pour trouver une alternative. Les DbConnection
classes et DbDataReader
les classes DbCommand
sont toutes disponibles dans .NET Standard 2.0 afin que nous puissions les utiliser à la place.
Cette version révisée utilise ces classes pour obtenir la liste des 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 = ...; // Your connection string goes here.
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 de Windows Form, nous pouvons simplement créer une instance de fabrique et la 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.
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 des appareils Windows 10 et Windows 11 et vos pages d’application ont une sensation moderne qui s’adapte bien à différentes tailles d’écran et résolutions.
Votre application répond aux mécanismes d’entrée autres qu’un clavier et une souris, et les fonctionnalités et paramètres seront intuitifs sur les appareils. Cela signifie que les utilisateurs apprennent à faire des choses une seule fois, puis fonctionnent 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 des expériences intéressantes avec Windows.
Ajouter un projet UWP
Tout d’abord, ajoutez un projet UWP à votre solution.
Ensuite, à partir de votre projet UWP, ajoutez une référence au projet de bibliothèque .NET Standard 2.0.
Créer vos pages
Ajoutez des pages XAML et appelez le code dans votre bibliothèque .NET Standard 2.0.
<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 bien démarrer avec 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.
Remarque
Pour les nouveaux projets multiplateformes, envisagez d’utiliser .NET MAUI.
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 aux API spécifiques à l’appareil. Ces applications tirent parti de l’accélération matérielle spécifique à 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 les fragments iBeacons et Android, et vous utiliserez des contrôles d’interface utilisateur natif standard pour créer des interfaces utilisateur qui ressemblent à la façon dont les utilisateurs s’attendent à 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# .
Remarque
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.
Créer vos pages
Notre exemple montre une liste de clients dans une 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 bien démarrer avec les 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.