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?
Antworten
Zu viele Anzeigen?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.
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.
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) }