Restaurer automatiquement les packages Nuget lors d’une build

Avec Visual Studio 2015 (et la nouvelle intégration du nouveau Nuget) il n’est plus possible de base de restaurer automatiquement les packages nuget avant compilation msbuild (en ligne de commande) (Enable Nuget Package Restore n’existe plus => et la modification automatique qu’il apportait aux csproj pour le lancement automatique du téléchargement des packages nuget à la préparation de la build non plus). Cela peut avoir de grosses conséquences au niveau de la build TFS, car en effet l’habitude était auparavant de ne pas inclure les packages Nuget sous contrôle de source, de ce fait sans la restauration automatique des packages, les packages nuget ne sont pas présents durant la build => impossible de compiler => échec de la build... Nous allons voir brièvement les solutions qui s’offrent à nous :

image

 

Je veux retrouver le comportement d’avant!

Commençons par une solution simple, mais clairement pas forcément recommandée (car indépendante de la version du nuget de visual studio, fait doublon avec le comportement de Visual Studio lui même et est sur des projets sérieux très lourde), l’objectif est de retrouver le “fonctionnel d’avant”.

  • Télécharger la dernière version en date de Nuget (au moins supérieur à 2.7) : https://dist.nuget.org/index.html
  • Faire appel à nuget en pre-build pour prévenir des packages manquants :  "$(SolutionDir)nuget.exe" restore "$(SolutionPath)" (on peut bien sûr compléter un peu la commande par des paramètres et une petite logique…  mais la base est là)

image

 

Cette méthode sans plus de logique n’est pas recommandée mais fonctionne… Conclusion => cette méthode est très mauvaise, il faut désormais changer ses habitudes.

Aller à l’inverse de ce qui se faisait auparavant

Deuxième solution : mettre les packages nuget sous contrôles de source.

/!\ : faire bien attention à ce que les binaires des packages soient bien sous contrôle de source, si ceci n’est pas fait automatiquement : les ajouter manuellement

image

 

Avoir une activité dédiée

Aucun problème sur les builds VNext, les activités sont prévues pour ça : il suffit de cocher la case Restore Nuget Packages

image

 

ou utiliser l’activité Nuget Installer (en regardant les sources disponible sur GitHub, ces activités ne font qu’un appel à nuget.exe)

Pour les anciennes builds il suffit simplement d’appeler l’outil nuget en ligne de commande comme précédemment via une activité (Custom ou InvokeProcess pour faire plus simple)

 

Il faudra maintenant choisir la solution en fonction du besoin. Sachant que la deuxième solution reste très intéressante ne serait-ce que pour une question de versionning (l’avantage d’être moins dépendant d’un référentiel externe) et la problématique d’espace est souvent un faux problème de nos jours (surtout avec VSO qui est “sans limite d’espace”)

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus