Nuget ist sehr cool, spinnt in Zusammenarbeit mit dem Visual Studio allerdings das ein oder andere Mal. Ein paar Handgriffe genügen meist.
Problem
Ich habe ein ASP.NET MVC4-Projekt und wollte heute einfach mal ein update-package über alle nugets in dem Projekt ausführen. Der Befehl selbst lief super durch. Na ja, zumindest fast. In meinem Fall kam sofort nach dem Update die Meldung, dass die *OpenAuth-Pakete nicht erfolgreich entfernt werden konnten. Abb. 1 zeuigt die entsprechende Meldung im Dialog „Manage Nuget Packages“.

Jetzt könnte man natürlich dem Rat folgen und auf „Restart Now“ klicken. Das allerdings bringt nicht viel. Nicht nur das. Das Problem ist, dass alle möglichen anderen Package-Funktionen jetzt auch nicht mehr laufen. Wenn ich z.B. versuche, jetzt jQuery zu installieren kommt sowas dabei raus:
PM> install-package jQuery 'jQuery 1.9.0' already installed. ***** already has a reference to 'jQuery 1.9.0'. One or more packages could not be completely uninstalled: DotNetOpenAuth.AspNet.4.0.3.12153, DotNetOpenAuth.Core.4.0.3.12153, DotNetOpenAuth.OAuth.Consumer.4.0.3.12153, DotNetOpenAuth.OAuth.Core.4.0.3.12153, DotNetOpenAuth.OpenId.Core.4.0.3.12153, DotNetOpenAuth.OpenId.RelyingParty.4.0.3.12153. Restart Visual Studio to finish uninstall.
Lösung
Na toll! Und nun? Ich habe ein wenig gebraucht, um rauszufinden, was eigentlich schief läuft. Letztlich brauchte mich ein Blick in den Ordner „packages“ in meinem Projektordner auf die Lösung:
Das Problem hier ist offensichtlich, dass die „alten“ Ordner, also die mit den Versionen, die eigentlich gelöscht werden sollten, noch da sind. Daran macht nun VS offensichtlich fest, dass das Update nicht geklappt hätte und beruhigt sich nicht mehr.
Als erstes sollte man nun die Solution im Studio schließen und dann die alten Ordner (in meinem Beispiel die mit 4.0x-Version) löschen. Nach dem erneuten Öffnen der Solution ist dann plötzlich alles in Ordnung.
Am Rande
Das OpenAuth und seine packages macht mir übrigens auch beim uninstall immer wieder Probleme. Selbst mit der Option -RemoveDependencies aufgerufen, kommt mein nuget nicht damit klar:
PM> uninstall-package DotNetOpenAuth.OpenId.Core -RemoveDependencies uninstall-package : Unable to uninstall 'DotNetOpenAuth.OpenId.Core 4.2.1.13026' because 'DotNetOpenAuth.OpenId.RelyingParty 4.2.1.13026' depends on it. At line:1 char:1 + uninstall-package DotNetOpenAuth.OpenId.Core -RemoveDependencies + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Uninstall-Package], InvalidOperationException + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.UninstallPackageCommand
Die einfachste Lösung für dieses Problem ist das Löschen aller OpenAuth-Ordner im package-Ordner und das entfernen aller OpenAuth-Einträge in der package.config. Dann ist endlich Ruhe mit OpenAuth :-).