web-dev-qa-db-fra.com

NuGet: mettre à jour un package vers une version spécifique dans tous les projets via PowerShell ou CMD

Nous avons un scénario dans lequel différentes équipes travaillent sur différentes parties d’un produit plus important. De temps en temps, tous les projets Visual Studio de toutes les solutions doivent mettre à jour certains de leurs packages NuGet référencés. À la suite de cette mise à jour, tous les projets de l’arborescence source doivent faire référence aux mêmes versions des packages.

Existe-t-il un moyen de mettre à jour un package NuGet spécifique vers une version spécifique dans tous les projets à l'aide de scripts approche automatique comme PowerShell?

Edit: Existe-t-il un moyen de charger d’une manière ou d’une autre les parties nécessaires de Visual Studio et de NuGet afin que met à jour correctement les références d’Assembly}?

Exemple: 

NuGetScript Update Solution.sln PackageName -version NewVersion

ou

NuGetScript Update PathToProjects PackageName -version NewVersion

Il y a trop de composants pour tous les charger dans Visual Studio et les mettre à jour manuellement via l'interface utilisateur du gestionnaire de packages.

17
matthias.lukaszek

Vous pouvez créer un script PowerShell pour rechercher dans tous les fichiers du projet ou packages.config de votre solution, puis appeler nuget update command pour mettre à jour les packages.

Cependant, il existe une limitation lors de la mise à jour des packages en dehors de Visual Studio, je vous recommande de procéder de la sorte à partir de Visual Studio:

La commande update téléchargera et extraira tous les nouveaux packages dans le fichier dossiers de paquets. Les références d'assemblage seront mises à jour dans le projet fichier, cependant cela est limité aux seules références existantes. Si un nouveau package a une Assemblée ajoutée, il ne sera pas ajouté dans le cadre du commande de mise à jour. Les nouvelles dépendances de paquets n'auront pas non plus leur Références d'assemblage ajoutées. Pour effectuer une mise à jour complète, utilisez Visual Studio.

6
Eddie Chen - MSFT

Veuillez utiliser la ligne de commande suivante dans la fenêtre de Package Manager Console pour mettre à jour un package spécifique dans une solution.

Get-Project -Tous | Package-Update PackageName -Version newVersion

14
Weiwei Cai - MSFT

Le script suivant a été trouvé ailleurs. Je l'ai essayé avec mes projets. Je n'ai pas le lien original

Le script suivant fait:

  1. exécuter la commande restore sur toutes les solutions trouvées dans un dossier
  2. Trouve tous les fichiers packages.config contenant le nom d'identifiant de paquet fourni
  3. exécute la commande update en utilisant le fichier packages.config et le nom du package comme paramètres

Cela suppose que nuget.exe est présent dans le dossier dans lequel vous allez l'exécuter.

param(
    [Parameter(Mandatory=$true)]
    [string]$packageId
)

Get-ChildItem *.sln -recurse | %{.\\nuget.exe restore $_.fullname}

Get-ChildItem packages.config -Recurse `
  | Where-Object {$_ | Select-String -Pattern $packageId} `
  | %{.\\nuget.exe update -Id $packageId $_.FullName}
1
jdelgado