35 votes

Comment mettre à jour les fichiers csproj avec VS2017

VS2017 a jusqu'à présent converti correctement plusieurs project.json / .xproj aux nouveaux projets de l .csproj format.

J'aimerais également utiliser la nouvelle .csproj avec un format plus ancien .csproj les projets qui ne ciblaient auparavant que .NET Framework (c'est-à-dire qu'ils ne fonctionnaient pas avec dnx/dotnet CLI).

Il semble que même si un projet ne cible toujours que .NET Framework, les avantages de <PackageReference> et un .csproj Le dossier semble valoir la peine (j'espère que ce n'est pas trop grave).

Est-il possible de le faire directement avec Visual Studio 2017 ?

Si ce n'est pas le cas, quelles étapes manuelles seraient nécessaires ?

5 votes

0 votes

Il semble que l'utilisation de la nouvelle .csproj pour les projets non-Core est possible, avec des restrictions, car montré ici

1 votes

Oui, utiliser le nouveau fichier csproj pour les projets non-Core est possible mais pas nécessaire. Voir ma réponse ci-dessous.

32voto

Mark S. Points 3627

J'ai modifié ma réponse pour préciser que vous n'avez pas besoin de mettre à jour votre carte de crédit. .csproj dossier. Comme Drew l'a commenté ci-dessous, il y a des avantages à le faire. Toutefois, VS2017 continuera à fonctionner avec le fichier classique csproj sans problème. En outre, rien dans VS2017 ne permet d'effectuer la mise à niveau pour vous. Si vous souhaitez tirer parti du nouveau format, la marche à suivre ci-dessous devrait vous aider.

Mise à niveau du .csproj au nouveau format de Visual Studio 2017 est facile pour les bibliothèques de classes simples ou les projets de console.

Si vous n'utilisez pas le contrôle de version, avant de commencer, assurez-vous de sauvegarder votre csproj et les deux Properties/AssemblyInfo.cs y packages.config . Le nouveau csproj est génial. Dans de nombreux projets, j'ai remplacé des centaines de lignes de code par une douzaine environ. Cependant, étant donné que Visual Studio 2017 continue de prendre en charge l'ancienne version du fichier csproj les fichiers, c'est peut-être un cas d'optimisation prématurée. Si vous avez une solution qui contient des dizaines de projets, de nombreux paquets NuGet et toute personnalisation de csproj vous entreprenez probablement un projet de travail inutile.

Remplacez tout le contenu de votre fichier .csproj par le code approprié comme suit.

Bibliothèque de classe

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>

Application Console

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>

Changez le <TargetFramework> à la version .NET dont vous avez besoin, comme net452, net46, net461, etc.

Par défaut, tout le code contenu dans le dossier de votre projet sera pris en compte par le compilateur. Si vous avez du code en dehors du dossier de votre projet, vous devez le référencer explicitement de la même manière que dans les versions précédentes de Visual Studio et de l'interface utilisateur. csproj .

Après avoir effectué les modifications ci-dessus, chargez votre solution dans Visual Studio 2017. À ce stade, les projets les plus basiques devraient se construire. Si ce n'est pas le cas, vous devez probablement ajouter des références d'assemblage ou de projet manquantes. L'ajout de références est très similaire à celui effectué dans les versions précédentes de Visual Studio. Sélectionnez votre projet dans l'explorateur de solutions, cliquez avec le bouton droit sur Dependencies et sélectionnez Add Reference . Ajoutez toutes les références de cadre ou de projet qui vous manquent.

Essayez à nouveau de construire votre solution/projet. Vous pouvez recevoir des erreurs concernant des attributs en double. Cette erreur est due au fait que les attributs précédemment définis dans AssemblyInfo.cs ont été déplacés vers le fichier csproj. En supprimant le AssemblyInfo.cs qui se trouve dans le dossier Propriétés, devrait résoudre ces erreurs. Avant de supprimer le fichier AssemblyInfo.cs vous devez déplacer toutes les données que vous avez définies. La plupart des attributs peuvent être saisis dans la section des informations sur le paquet de votre fichier de projet. Cliquez avec le bouton droit de la souris sur le nom de votre projet, sélectionnez la page Package, et entrez toutes les données qui ont été précédemment définies dans votre fichier de projet. AssemblyInfo.cs fichier. Cela inclut des éléments tels que la version de l'assemblage, l'auteur, le copyright, etc.

Vous trouverez ci-dessous une capture d'écran qui montre l'étape précédente.

enter image description here

Si vous utilisez des paquets NuGet dans votre projet, vous devez également les transférer vers le nouveau format. Avant Visual Studio 2017, NuGet s'appuyait sur un fichier nommé Packages.config dans la Racine de votre projet en plus des références dans csproj . Pour migrer les références de vos paquets NuGet, faites un clic droit sur votre solution et chargez le gestionnaire de paquets Nuget. Une fois chargé, dans le coin supérieur droit, cliquez sur le rouage, et les options du gestionnaire de paquets NuGet se chargeront. Sélectionnez General . Sous Gestion des paquets, changez l'option Default package management format à PackageReference. À ce stade, vous devrez réintégrer manuellement tous vos paquets NuGet dans votre solution. Vous pouvez trouver tous les paquets dans le répertoire packages.config dans le dossier Racine du projet. Une fois que vous avez réintégré tous les paquets, vous pouvez supprimer le fichier packages.config fichier.

4 votes

Merci beaucoup pour cela. Quelques avantages du nouveau projet qui pourraient motiver une mise à niveau : 1) une gestion plus simple des dépendances NuGet (plus de fichier de paquets, et plus besoin d'utiliser la console du gestionnaire de paquets ou la gestion des paquets NuGet de VS), 2) la possibilité de définir un paquet NuGet directement dans le fichier du projet, 3) la possibilité de modifier le fichier .csproj sans décharger/recharger.

0 votes

@DrewNoakes et aussi un .csproj qui est beaucoup plus facile à gérer avec le contrôle de version et peut être édité à la main pendant les fusions. J'ai utilisé l'outil de @thekip sur plusieurs projets avec beaucoup de succès.

21voto

thekip Points 2129

J'ai créé un outil pour cela qui fonctionne avec les fichiers csproj : https://github.com/hvanbakel/CsprojToVs2017

Vous pouvez simplement l'exécuter sur un csproj et il convertira le fichier et créera une sauvegarde de l'ancien.

1 votes

C'est génial, merci ! Nous avons converti quelques projets de façon transparente avec votre outil. Dommage qu'il ne fonctionne pas avec les projets utilisant Entity Framework. Qu'est-ce qui l'empêche de fonctionner ? Y aurait-il un moyen de laisser l'outil effectuer la conversion autant que possible, sachant que certaines corrections manuelles seraient nécessaires par la suite ?

3voto

Alper Ebicoglu Points 2977

Mise à jour : le lien de l'outil ci-dessous est mort, mais à partir de VS2017 15.7, cette fonctionnalité est intégré à Visual Studio .

Remarque : Cette opération ne met à jour que le mécanisme de référence NuGet. Il ne passe pas au nouveau type de csproj.


Il existe un outil étonnant qui convertit automatiquement les projets qui utilisent packages.config ou project.json en PackageReference.

https://marketplace.visualstudio.com/items?itemName=TaylorSouthwickMSFT.NuGetPackagetoProjectjsonConverter

  1. Installez-le dans votre Visual Studio

  2. Après avoir installé l'extension, ouvrez votre solution et cliquez droit sur la solution dans l'Explorateur de solutions et cliquez sur Mettre à niveau vers le paquet Références

  3. Après avoir sélectionné cela, le projet sera transformé comme indiqué ci-dessous. Il est fortement recommandé d'effectuer cette opération dans un répertoire où le contrôle de source est activé afin de pouvoir facilement annuler si quelque chose ne va pas.

enter image description here

2 votes

Cela semble très utile, merci. Notez qu'il ne met pas réellement à jour le format csproj vers le nouveau style .NET Core / dotnet SDK, mais convertit plutôt l'ancien style. packages.config références à <PackageReference> dans vos fichiers csproj existants. Cela peut en fait être souhaitable pour de nombreux projets qui n'ont pas besoin de cibler .NET Core.

2voto

Tomasz Chudzik Points 151

Il existe un excellent outil qui convertit automatiquement le csproj au nouveau format SDK pour vous :

https://github.com/hvanbakel/CsprojToVs2017

enter image description here

Bien sûr, il ne convertira pas un projet ASP.NET car ces derniers ne supportent pas le nouveau format SDK. Tous les autres projets fonctionnent comme un charme.

2voto

Drew Noakes Points 69288

Il y a un try-convert outil construit par Microsoft (mais non pris en charge) qui peut être utile :

C'est un Outil global .NET qui peut être installé avec :

dotnet tool install -g try-convert

Une fois installé, exécutez try-convert pour les instructions. Dans sa forme la plus simple, utilisez :

try-convert -p MyProject.csproj

Une fois encore, notez qu'il s'agit d'un outil non pris en charge et qu'il peut ne pas fonctionner de manière fiable. Depuis le Documents sur le portage de .NET Framework à .NET Core :

En outre, vous pouvez tenter de porter des solutions plus petites ou des projets individuels en une seule opération vers le format de fichier de projet .NET Core avec la fonction dotnet try-convert outil. dotnet try-convert n'est pas garanti pour tous vos projets, et il peut provoquer des changements subtils dans le comportement dont vous dépendiez. Utilisez-le comme point de départ qui automatise les choses de base qui peuvent être automatisées. Il ne s'agit pas d'une solution garantie pour la migration d'un projet.

Il s'agit d'un projet open source, disponible sur GitHub :

https://github.com/dotnet/try-convert

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X