Depuis que j'ai commencé à travailler avec la communauté sur le portage des applications de bureau du .NET Framework vers le .NET Core, j'ai remarqué qu'il y a «deux camps»: les représentants d'un veulent une liste très simple et courte d'instructions pour le portage de leurs applications vers .NET Core , tandis que les représentants d'un autre préfèrent une approche plus fondée sur des principes avec beaucoup d'informations initiales. Au lieu d'écrire un document comme le «couteau suisse», nous allons publier deux articles de blog, un pour chaque «camp»:
- Ce message est un cas simple . Il se concentre sur des instructions simples et de petites applications et considère la manière la plus simple de porter une application sur .NET Core.
- Plus tard, nous publierons un autre article pour les cas plus complexes . Il se concentrera sur les applications non triviales, telles qu'une application WPF avec des dépendances sur WCF et des packages d'interface utilisateur tiers.
Si vous préférez regarder une vidéo plutôt que de la lire, voici une vidéo où je fais tout ce qui est décrit ci-dessous.
Étape 0 - Prérequis
Pour transférer des applications de bureau vers Core, vous aurez besoin de
.NET Core 3 et Visual Studio 2019.
Étape 1 - Lancer l'analyseur de portabilité
Avant le portage, vous devez vérifier la compatibilité de votre application avec .NET Core. Pour ce faire, téléchargez et exécutez l'
analyseur de portabilité .NET .
- Dans le premier onglet, Récapitulatif de la portabilité, si toutes les valeurs de la colonne .NET Core sont à 100% (tout est surligné en vert), votre code est entièrement compatible et vous pouvez passer à l'étape 2.
- Si vous avez des valeurs inférieures à 100%, examinez d'abord tous les assemblys qui ne font pas partie de votre application. Pour eux, vous devez vérifier si leurs auteurs fournissent des versions pour .NET Core ou .NET Standard.
- Regardez maintenant l'autre partie des assemblys qui provient de votre code. Si aucun assemblage n'est spécifié dans le rapport de portabilité, passez à l'étape 2. Une fois cela fait, ouvrez l'onglet Détails, filtrez le tableau en cliquant sur la colonne Assemblage et concentrez-vous uniquement sur ceux qui sont liés à votre application. Parcourez la liste et le refactoring de code pour cesser d'utiliser l'API ou remplacez l'utilisation de l'API par des alternatives .NET Core.

Étape 2 - Migration de .csproj vers le style SDK
Dans l'
Explorateur de solutions, cliquez avec le bouton droit sur votre projet (pas une solution!). Voyez-vous
Modifier le fichier de projet ? Si tel est le cas, vous utilisez déjà le fichier de projet de style SDK, vous devez donc passer à l'
étape 3 . Sinon, procédez comme suit:
- Vérifiez dans l' Explorateur de solutions si le projet contient le fichier packages.config . Si ce n'est pas le cas, aucune action n'est requise, mais si c'est le cas, cliquez avec le bouton droit sur packages.config et sélectionnez Migrer les packages.config vers PackageReference . Cliquez ensuite sur OK .
- Ouvrez le fichier de projet en cliquant avec le bouton droit sur le projet et en sélectionnant Décharger le projet . Cliquez ensuite avec le bouton droit sur le projet et sélectionnez Modifier <votre nom de projet> .csproj .
- Copiez le contenu du fichier de projet quelque part, par exemple, dans le Bloc-notes, afin de pouvoir le rechercher ultérieurement.
- Supprimez tout du fichier de projet ouvert dans Visual Studio (je sais que cela semble agressif, mais nous ajouterons uniquement le contenu nécessaire de la copie que nous venons de faire en quelques étapes). Au lieu de simplement supprimer le texte, collez le code suivant.
Pour une application sur WinForms:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
Pour une application WPF:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
- Trouvez Bloc-notes PackageReference . Si vous n'avez rien trouvé, passez à autre chose. Si vous trouvez un PackageReference , copiez l'intégralité de ItemGroup contenant le PackageReference dans le fichier de projet ouvert dans Visual Studio, directement sous les lignes insérées à l'étape ci-dessus. Faites cela pour chaque élément PackageReference que vous avez trouvé. Le bloc copié devrait ressembler à ceci:
<ItemGroup> <PackageReference Include="NUnit"> <Version>3.11.0</Version> </PackageReference> </ItemGroup>
- Faites maintenant la même chose que ci-dessus pour ProjectReference . Si vous n'avez rien trouvé, passez à autre chose. Si vous trouvez des éléments ProjectReference , ils ressembleront à ceci:
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj"> <Project>{7bce0d50-17fe-4fda-b6b7-e7960aed8ac2}</Project> <Name>WindowsFormsApp1</Name> </ProjectReference> </ItemGroup>
- Vous pouvez supprimer des lignes avec les propriétés Projet et Nom , car elles ne sont pas nécessaires dans le nouveau style du fichier de projet. Donc, pour chaque ProjectReference que vous avez trouvé (le cas échéant), copiez uniquement ItemGroup et ProjectReference .
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup>
- Enregistrez tout. Fermez le fichier .csproj dans Visual Studio. Cliquez avec le bouton droit sur votre projet dans l' Explorateur de solutions et sélectionnez Recharger le projet . Reconstruisez et assurez-vous qu'il n'y a pas d'erreurs.
Bonne nouvelle, vous venez de mettre à jour votre fichier de projet vers un nouveau style SDK! Le projet cible toujours le .NET Framework, mais vous pouvez maintenant le reconfigurer en .NET Core.
Étape 3 - Recibler sur .NET Core
Ouvrez le fichier de projet en double-cliquant dessus dans l'
Explorateur de solutions . Recherchez la propriété
TargetFramework et remplacez la valeur par
netcoreapp3.0 . Votre fichier de projet devrait maintenant ressembler à ceci:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ... </PropertyGroup> ... </Project>
Créez et exécutez votre projet.
Félicitations, vous l'avez migré vers .NET Core 3!Correction d'un bug
Si vous rencontrez des erreurs comme
The type or namespace <some name> could not be found
ou
The name <some name> does not exist in the current context
et si votre rapport de portabilité s'affiche en vert, vous devez savoir qu'ils sont faciles à corriger en ajoutant simplement le package NuGet avec la bibliothèque appropriée. Si vous ne parvenez pas à trouver le package NuGet avec la bibliothèque manquante, essayez de contacter
Microsoft.Windows.Compatibility . Ce package ajoute ~ 21K. API .NET à partir du .NET Framework.
Travailler avec des designers
Bien que l'interface utilisateur de l'application puisse être modifiée à l'aide de code, les développeurs préfèrent généralement utiliser des constructeurs visuels. Avec .NET Core, nous avons dû changer l'architecture du travail des concepteurs avec des projets .NET Core:
- WPF Designer est déjà en mode aperçu et nous travaillons à lui ajouter des fonctionnalités supplémentaires.
- WinForms Designer pour .NET Core sera disponible plus tard, donc pour l'instant, vous pouvez utiliser WinForms Designer pour .NET Framework comme solution de contournement.
Voici comment utiliser le constructeur WinForms pour le .NET Framework:
- Copiez le fichier .csproj (par exemple, MyProject.csproj ), donnez-lui un nom différent, par exemple, MyProject.NetFramework.csproj et placez-le à côté du fichier de projet existant.
- Assurez-vous que votre projet est fermé dans Visual Studio, ouvrez un nouveau projet MyProject.NetFramework.csproj .
Dans l' Explorateur de solutions, cliquez avec le bouton droit sur votre projet et sélectionnez Propriétés . Dans l'onglet Application (devrait s'ouvrir par défaut), définissez le nom de l' assembly et l' espace de noms par défaut sur les mêmes valeurs que dans le projet d'origine (supprimez «.NetFramework» des noms).
Enregistrez cette solution à côté de votre solution existante.
- Ouvrez un nouveau fichier de projet et remplacez TargetFramework par net472 .
- Maintenant que vous devez utiliser le constructeur WinForms, téléchargez votre projet à partir de MyProject.NetFramework.csproj et vous pouvez commencer à travailler avec le constructeur .NET Framework. Lorsque vous avez terminé, fermez et ouvrez votre projet avec le fichier de projet .NET Core.
- Il s'agit simplement d'une solution de contournement jusqu'à ce que le constructeur WinForms pour .NET Core soit prêt.
Pourquoi passer à .NET Core?
Regardez une vidéo où Scott Hunter et moi parlons de toutes les dernières mises à jour sur .NET Core 3.
Migration vers .NET Core 3.0 .