796 Stimmen

Wie kann ich NuGet dazu bringen, alle Pakete in der packages.config zu installieren/aktualisieren?

Ich habe eine Lösung, die mehrere Projekte enthält. Die meisten Referenzen von Drittanbietern fehlen, aber es gibt packages.config Datei für jedes Projekt. Wie kann ich NuGet dazu bringen, alle benötigten Pakete zu installieren/aktualisieren? Muss dies für jedes Projekt über die Befehlszeile erfolgen?

4voto

Sergei Zinovyev Punkte 1128

Ich habe versucht Update-Package -reinstall aber es schlägt bei einem Paket fehl und hat die Verarbeitung aller übrigen Pakete von Projekten in meiner Lösung gestoppt.

Am Ende habe ich ein Skript erstellt, das alle package.config-Dateien auflistet und ausführt Update-Package -Reinstall -ProjectName prj -Id pkg für jedes Projekt/Paket.

Ich hoffe, es kann für jemanden nützlich sein:

$files = Get-ChildItem -Recurse -Include packages.config;

[array]$projectPackages = @();
$files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } }

$projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }

Bearbeiten: Dies ist ein Fehler, den ich hatte: Update-Package : Das Paket 'EntityFramework.BulkInsert-ef6' kann nicht gefunden werden. Vorhandene Pakete müssen wiederhergestellt werden, bevor eine Installation oder Aktualisierung durchgeführt wird. Manueller Lauf von Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 hat sehr gut funktioniert.

4voto

June Punkte 955

Wenn Sie Nuget 2.8 installieren, aktivieren Sie das Kontrollkästchen

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

in Visual Studio. Wenn diese Option aktiviert ist, können Sie das Projekt einfach neu erstellen, um alle Referenzbibliotheken wiederherzustellen.

3voto

user3516584 Punkte 41

Bei VS2012 V11, wenn ich "-Reinstall" am Ende der Zeile verwende, funktioniert es nicht.

Also habe ich einfach benutzt:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

3voto

Joe the Coder Punkte 1664

Ich weiß, dies ist ein alter Beitrag, aber ich dachte, er könnte nützlich sein. Wenn Sie bestimmte Pakete während des Aktualisierungsprozesses ignorieren möchten (z. B. Pakete, die JavaScript-Referenzen aktualisieren), verwenden Sie das folgende PowerShell-Skript (stellen Sie sicher, dass die Paketquelle in der Paketmanager-Konsole auf "Alle" eingestellt ist):

EDIT 2014-09-25 10:55 AM EST - Ein Fehler im Skript wurde behoben

$packagePath = "packages.config"
$projectName = "MyProjectName"

$packagesToIgnore = @(
    "bootstrap",
    "jQuery",
    "jquery-globalize",
    "jquery.mobile",
    "jQuery.jqGrid",
    "jQuery.UI.Combined",
    "jQuery.Validation",
    "Microsoft.jQuery.Unobtrusive.Validation",
    "Modernizr",
    "Moment.js"
)

[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}

$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }

3voto

Sunny Sharma Punkte 4283

Die Nuget-Paketmanager-Konsole in Visual Studio 2012 gibt Ihnen jetzt automatisch eine Schaltfläche "Wiederherstellen", sobald sie ein Paket findet, das nicht installiert, aber in der package.config vorhanden ist. Tolles Feature!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X