web-dev-qa-db-fra.com

Comment mettre à jour automatiquement les paquets NuGet vers la dernière version disponible

J'ai deux référentiels et j'ai besoin de bibliothèques compilées d'un référentiel dans l'autre. Je ne veux pas vérifier manuellement repo1 pour les bibliothèques mises à jour, et copier/commettre à repo2, parce que c'est stupide. J'ai créé repo1 en construisant des packages NuGet sur chaque version des bibliothèques nécessaires et en les publiant sur un serveur interne NuGet. Les projets dans repo2 peuvent ensuite référencer ces packages NuGet, et tout fonctionne (presque). 

Le dernier obstacle à cette tâche consiste à mettre à jour automatiquement les packages NuGet dans les projets de repo2. Étant donné que je ne sais pas quand les bibliothèques de repo1 seront mises à jour (et que je n'aurais pas dû le faire), j'aimerais une sorte d'événement de construction sur les projets de repo2 qui mettra automatiquement à jour les packages NuGet. À l'heure actuelle, je ne fais qu'un événement de pré-construction, mais comme les fichiers packages.config contiennent le numéro de version du paquet installé, je continue à recevoir les fichiers modifiés dans repo2 (les fichiers packages.config sont mis à jour).

Ma question est donc la suivante: quel est le bon moyen de mettre à jour automatiquement les paquets NuGet sans perdre mon VCS repo2? ScottGu déclare Ici (dans les commentaires) qu'il est possible d'accrocher les mises à niveau de paquetages aux générations CI, mais il ne précise pas comment et ma solution actuelle est compliquée. Y a-t-il une manière intégrée qui me manque? Ou de meilleures solutions de rechange? 

37
themilkyninja

Vous pourriez probablement utiliser la fonctionnalité de restauration de paquet NuGet (quelques informations ici: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages )

Lors de la construction du projet, il appelle "nuget.exe -install" pour réinstaller les packages à partir de packages.config. Je ne l’ai pas essayé mais vous pouvez ajouter une commande Update au fichier nuget.targets de la même manière. (Vous devrez appeler la mise à jour nuget.exe et l’installation existante de nuget.exe).

3
Alexandre Dion

Ceci explique comment le faire via MSBuild

http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/

<Target Name="UpdatePackages" DependsOnTargets="CheckPrerequisites">
   <Exec Command="$(UpdateCommand)"
      Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

   <Exec Command="$(UpdateCommand)"
      LogStandardErrorAsError="true"
      Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>


<!-- Commands -->
<UpdateCommand>$(NuGetCommand) update "$(PackagesConfig)" -source "$(PackageSources)" -id AutoUpdater $(NonInteractiveSwitch)</UpdateCommand>
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>

<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>

<!-- We need to ensure packages are restored prior to Assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'true'">
    RestorePackages;
    UpdatePackages;
    $(BuildDependsOn);
</BuildDependsOn>
0
C0r3yh