Existe-t-il un moyen de mettre à jour automatiquement nuget.exe dans le dossier .nuget lors de l'utilisation de la restauration de package?

92

Mon équipe utilise l'option Activer la restauration des packages depuis Nuget 1.5 pour garder les packages hors de notre contrôle de code source. Lorsque Nuget 1.6 a été publié, nous avons remarqué un problème où il ne tirait pas les packages vers le bas, et nous l'avons suivi vers le Nuget.exe dans le dossier .nuget nécessaire pour être mis à jour vers 1.6 pour correspondre au gestionnaire de packages.

Quelle est la meilleure façon de mettre à jour une solution une fois que Nuget a été mis à jour? Je ne vois pas de moyen facile du studio de dire quelle version de nuget se trouve dans le dossier solution. Jusqu'à présent, nous supprimons le dossier .nuget et réexécutons la commande Enable Package Restore.

Meule
la source

Réponses:

148

Je suggérerais de mettre à jour .nuget \ nuget.exe avec cette commande à partir de la ligne de commande:

nuget.exe update -self

[EDIT]: fermez d'abord VS Solution. S'il y a une mise à jour et que la solution est ouverte, nuget.exe sera supprimé de la solution.

Vous pouvez mettre à jour automatiquement nuget.exe lors de la restauration en modifiant le .nuget \ nuget.targets pour ajouter la commande ci-dessus. Je regarderais la commande de restauration là-dedans comme exemple. Mais je ne suis pas sûr que cela en vaille la peine, les mises à jour de nuget.exe ne sont pas si courantes et la compatibilité descendante devrait être interrompue très rarement.

Alexandre Dion
la source
J'ai essayé cela sur l'un de mes projets. Il a mis à jour NuGet.exe mais il semble l'avoir supprimé de ma solution. Je sais que je peux le rajouter, mais cela semble étrange.
Rick
Ah oui, j'ai essayé une vraie mise à jour cette fois et nuget.exe a également été supprimé de la solution VS pour moi. (Je n'ai pas eu cela auparavant car nuget.exe était à jour). Cela se produit car lors de la mise à jour, le nuget.exe actuel est d'abord déplacé vers nuget.exe.old, de sorte que la référence de fichier est rompue. Je doute que cela soit corrigé, j'exécuterais la commande avec la solution fermée.
Alexandre Dion
Il semble que la mise à jour automatique ne vous donnerait pas un nouveau fichier NuGet.targets, ce qui pourrait être un problème. Je pense que l'équipe NuGet a apporté quelques modifications au fichier des cibles entre les versions 1.6 et 1.7.
William Gross
@William Gross et bien vous pourriez vérifier s'il y avait une mise à jour de nuget.org/packages/NuGet.Build (c'est le paquet qui contient nuget.targets)
Alexandre Dion
a travaillé pour moi, n'oubliez pas de lancer le cmd en tant qu'administrateur
Mohammad
31

J'ai trouvé le meilleur moyen de gérer cela en supprimant simplement le dossier .nuget et en réactivant la restauration du package à l'échelle de la solution. Comme indiqué ci-dessus, vous pouvez ajouter une commande de mise à jour automatique à votre build, mais cela ne mettra pas à jour les cibles ou les fichiers de configuration s'il y a des changements entre les versions (ou supprimera la référence de votre solution). Ce n'est peut-être pas un gros problème, mais c'est le moyen le plus sûr de vous assurer que vous disposez des derniers fichiers exe et de configuration. Et à la fin de la journée, la mise à jour n'est un problème que si vous avez besoin d'accéder à une nouvelle commande ou s'il y a finalement un changement radical dans une nouvelle version.

Chris Kirby
la source
3
+1 - J'ai trouvé que c'était le meilleur moyen d'obtenir des mises à jour du fichier NuGet.exe ainsi que du NuGet.targetsfichier (ce qui est également important). Assurez-vous simplement de sauvegarder toutes les personnalisations que vous avez apportées au NuGet.targetsfichier (par exemple, PackageSources personnalisé) afin de pouvoir les réappliquer au nouveau fichier.
Jesse Webb
super qui a fonctionné pour moi comme du charme !! merci pour l'information
Gayan
-3

Voir l'article de David Ebbo sur son blog

En gros, tout ce que vous avez à faire est de créer un fichier NuGet.Config à côté de votre fichier .sln, contenant:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>
Rodolpho Brock
la source
1
La question demande comment mettre à jour automatiquement nuget.exe vers la dernière version lors de l'utilisation de la restauration de package. Le billet de blog de David Ebbo explique uniquement comment restaurer des paquets à l'aide de nuget.exe.
Frith
Vous devriez probablement spécifier à quelle partie de la question vous répondez alors, en regardant le titre de la question et la réponse acceptée, il est facile de considérer cette réponse comme déplacée ...
Jens