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.
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.
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
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:
restore
sur toutes les solutions trouvées dans un dossierpackages.config
contenant le nom d'identifiant de paquet fourniupdate
en utilisant le fichier packages.config
et le nom du package comme paramètresCela 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}