2012-03-30 6 views
15

SZENARIONuGet - Verwaltung und Multi-Version-Pakete in Einzel Lösung

Ein VS-Lösung mit n Projekten zu entfernen. Projekt A referenziert Paket Y v1, Projekt B referenziert Paket Y v2. Es ist jetzt nicht möglich, alle Verweise auf Paket Y für alle Projekte in der Projektmappe mit Hilfe des NuGet-Paketverwaltungsdialogs auf Lösungsebene zu aktualisieren. Dies ist nur möglich, wenn alle Projekte auf die gleiche Version des Pakets Y verweisen Ich beschäftige mich nur mit zwei Projekten, aber ich habe es mit vielen Projekten zu tun, die durch eine schlechte Paketverwaltung auf viele Paketversionen verweisen, wenn sie alle dieselbe Version referenzieren sollten.

Bevor ich den Nachmittag schreibe eine Konsole App. um alle package.config-Dateien für eine Lösung automatisch zu aktualisieren, so dass jedes referenzierte Paket nur über seine neueste Version referenziert wird (zuletzt referenziert, nicht die letzte, mit Ausnahmen/Vorbehalte usw.) ... gibt es ein Tool/eine Methode dafür das schon? Oder ein anderer Ansatz, von dem ich nichts weiß?

+0

Freitagnachmittag ist super Zeit! – Bond

+0

Haben Sie versucht, mit sed oder awk? –

+0

oder powershell !! –

Antwort

10

Sie können dies im Nuget Package Manager für Solution durchführen (Um das Menü zu finden, klicken Sie mit der rechten Maustaste auf die Lösung oder gehen Sie zu Tools-> Library Package Manager). Die Registerkarte Aktualisieren in diesem Dialogfeld enthält Vorschläge zum Aktualisieren für mehrere Projekte, für die das Update anwendbar ist. Das Gleiche gilt für die Deinstallation von der Registerkarte Installiert.

Oder öffnen Sie bei geöffneter Lösung die NuGet-Konsole, führen Sie "Update-Paket" aus, um alle Pakete für alle Projekte zu aktualisieren.

Update-Package [-Id] <string> [-IgnoreDependencies] [-ProjectName <string>] [-Version <string>] [-Safe] [-Source <string>] [-IncludePrerelease] 

Es findet das gleiche Updates als im Dialog, so stellen Sie sicher, das richtige Futter (oder „All“) ausgewählt ist in „Paketquelle:“ Drop-Down Es kann auch spezifische Pakete/Projekte zu aktualisieren arbeiten .

Beispiel:

PM> install-package NUnit -version 2.5.9.10348 -ProjectName ProjectA 
Successfully installed 'NUnit 2.5.9.10348'. 
Successfully added 'NUnit 2.5.9.10348' to ProjectA. 

PM> install-package NUnit -version 2.5.10.11092 -ProjectName ProjectB 
Successfully installed 'NUnit 2.5.10.11092'. 
Successfully added 'NUnit 2.5.10.11092' to ProjectB. 

PM> update-package 
Updating 'NUnit' from version '2.5.9.10348' to '2.6.0.12054' in project 'ProjectA'. 
Successfully removed 'NUnit 2.5.9.10348' from ProjectA. 
Successfully installed 'NUnit 2.6.0.12054'. 
Successfully added 'NUnit 2.6.0.12054' to ProjectA. 
Successfully uninstalled 'NUnit 2.5.9.10348'. 
Updating 'NUnit' from version '2.5.10.11092' to '2.6.0.12054' in project 'ProjectB'. 
Successfully removed 'NUnit 2.5.10.11092' from ProjectB. 
Successfully added 'NUnit 2.6.0.12054' to ProjectB. 
Successfully uninstalled 'NUnit 2.5.10.11092'. 
2

Erstens ist nur das Ändern der XML-Dateien nicht ausreichend, damit NuGet die Referenzen ändern kann. In der Tat erhalten Sie manchmal Fehler, wenn Sie packages.config-Dateien von Hand ändern. Die Paketmanagerkonsole kann alle Pakete in der Lösung aktualisieren. Sie können einfach den Befehl "Get-Project-All | Update-Package" aufrufen.

Und zweitens, bevor Sie diesen Befehl aufrufen, stellen Sie sicher, dass Sie richtige Paketquellen zur Verfügung haben.

+0

Und zweitens ... – Steven

+0

Dieser Konsolenbefehl meldete keine Updates für alle Paketreferenzen in jedem Projekt in der Lösung, aber es gibt Updates und ich kann dann einzeln über den Dialog aktualisieren. –

+0

lass mich das nochmal überprüfen. – daryal