NuGet restore "funzt nicht"? Doch!

Nur ganz kurz, weil ich da zuletzt unnötig viel Zeit mit verloren habe: ich hatte ein Projekt in C#, das das Entity Framework mit NuGet eingebunden hatte und zwar so, dass das Paket nicht im Source Control eingecheckt werden sondern jeweils bei Bedarf im Rahmen des Builds geholt werden sollte (grundsätzlich geht das so: Enabling Package Restore During Build).

Lokal auf meinem Rechner funktionierte das auch prima. Nur beim automatischen Build auf dem Build Server (per TFS) hat das irgendwie nicht geklappt und gab immer nur „are you missing an assembly reference?“. Im Build Log habe ich gesehen, dass NuGet es schafft, die Pakete zu holen bzw. dass alle benötigten Pakete schon installiert seien. Im Netz war dann der Tipp, das „packages“ Verzeichnis auf dem Build Agent mal zu löschen (half nicht) oder per „Update-Package -reinstall“ alle Pakete in der Solution neu zu installieren (half auch nicht) oder noch esoterischere Hinweise.

Irgendwann ist mir dann auf dem Build Agent aufgefallen, dass die richtigen Verzeichnisse zwar vorhanden waren, aber keine „EntityFramework.dll“ existierte, sondern nur eine „EntityFramework.xml“. Anscheinend hatte ich es dann mit den falschen Suchwörtern probiert („nuget restore only xml not dll“ oder leichte Abwandlungen davon), denn zunächst habe ich da nichts Brauchbares gefunden. Erst nach viel zu langer Zeit bin ich über Missing Nuget Packages on TFS Build Server gestolpert, was die Lösung brachte…

Ich hatte zwar „“ in der NuGet Konfiguration eingestellt, wie überall beschrieben, aber es irgendwie geschafft, den „packages“ Ordner einzuchecken ohne die DLLs. Und dann funktioniert das restore nicht, denn anscheinend wird nur geprüft, dass die richtigen Verzeichnisse vorhanden sind, nicht aber, ob alle Dateien darin vorliegen.

Abhilfe war dann wie in Missing Nuget Packages on TFS Build Server vorgeschlagen: das „packages“ Verzeichnis aus dem Source Control löschen.