Wir haben ein Szenario, in dem verschiedene Teams an verschiedenen Teilen eines größeren Produkts arbeiten. Von Zeit zu Zeit müssen alle Visual Studio-Projekte aller Lösungen dort einige ihrer referenzierten NuGet-Pakete aktualisieren. Als Ergebnis dieser Aktualisierung sollten alle Projekte in der gesamten Quellstruktur auf die gleichen Versionen der Pakete verweisen.
Gibt es eine Möglichkeit, ein bestimmtes NuGet-Paket auf eine bestimmte Version in allen Projekten zu aktualisieren, indem Sie automatischer Ansatz wie PowerShell-Skripts verwenden?
Bearbeiten: Gibt es eine Möglichkeit, die erforderlichen Teile von Visual Studio und NuGet irgendwie auf Aktualisieren der Assemblyreferenzen zu laden?
Beispiel:
NuGetScript Update Solution.sln PackageName -version NewVersion
oder
NuGetScript Update PathToProjects PackageName -version NewVersion
Es gibt zu viele Komponenten, um alle in Visual Studio zu laden und manuell über die Package Manager-Benutzeroberfläche zu aktualisieren.
Sie können ein PowerShell-Skript erstellen, um alle Projektdateien oder Packages.config-Dateien in Ihrer Projektmappe zu durchsuchen, und anschließend den Befehl nuget update aufrufen, um die Pakete zu aktualisieren.
Beim Aktualisieren von Paketen außerhalb von Visual Studio gibt es jedoch eine Einschränkung. Ich würde Ihnen empfehlen, dies von Visual Studio aus zu tun:
Mit dem Aktualisierungsbefehl werden alle neuen Pakete in die .__-Datei heruntergeladen und extrahiert. Paketordner. Assemblyreferenzen werden im Projekt aktualisiert Datei, dies ist jedoch nur auf vorhandene Referenzen beschränkt. Wenn ein neues Paket hat eine hinzugefügte Assembly, es wird nicht als Teil von .__ hinzugefügt. Aktualisierungsbefehl Neue Paketabhängigkeiten haben auch keine Montagehinweise hinzugefügt. Um ein vollständiges Update durchzuführen, verwenden Sie Visual Studio.
Verwenden Sie die folgende Befehlszeile im Fenster der Package Manager Console, um ein bestimmtes Paket in einer Lösung zu aktualisieren.
Get-Project-All | Update-Package PackageName -Version neueVersion
Das folgende Skript wurde woanders gefunden. Ich habe es mit meinen Projekten versucht. Ich habe nicht den ursprünglichen Link
Das folgende Skript funktioniert:
restore
für alle Lösungen aus, die in einem Ordner gefunden werdenpackages.config
-Dateien, die den angegebenen Paket-ID-Namen enthaltenupdate
unter Verwendung der Datei packages.config
und des Paketnamens als Parameter ausDies setzt voraus, dass sich nuget.exe in dem Ordner befindet, von dem aus Sie dies ausführen
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}