Napotkałem ten problem w dwóch scenariuszach.
Po pierwsze, kiedy próbuję zbudować moje rozwiązanie z wiersza poleceń przy użyciu programu msbuild.exe. Po drugie, kiedy próbuję zbudować sln i zawierające je projekty na moim serwerze kompilacji przy użyciu TFS i CI.
Pojawiają się błędy z twierdzeniem, że brakuje referencji. Podczas sprawdzania zarówno mojego lokalnego katalogu kompilacji, jak i serwera TFS widzę, że folder / packages nie jest tworzony, a pakiety NuGet nie są kopiowane. Postępuj zgodnie z instrukcjami podanymi w odpowiedzi Alexandre'a http://nuget.codeplex.com/workitem/1879 również nie działa dla mnie.
Włączyłem pakiety przywracania za pośrednictwem VS2010 i widziałem, że kompilacje działają tylko z poziomu VS2010. Ponownie, użycie msbuild kończy się niepowodzeniem.Moje obejście jest prawdopodobnie całkowicie nieprawidłowe, ale w moim środowisku wszystko działało z lokalnej kompilacji wiersza poleceń, a także z kompilacji CI w TFS.
Wszedłem do. \ Nuget i zmieniłem ten wiersz w pliku .nuget \ NuGet.targets:
z:
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>
to: (uwaga, bez cudzysłowów wokół zmiennych)
<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>
Rozumiem, że jeśli moje katalogi zawierają spacje, to się nie powiedzie, ale nie mam spacji w moich katalogach, więc to obejście sprawiło, że moje kompilacje zakończyły się pomyślnie ... na razie.
Powiem, że włączenie rejestrowania poziomu diagnostycznego w kompilacji pomoże pokazać, jakie polecenia są wykonywane przez msbuild. To właśnie doprowadziło mnie do tymczasowego zhakowania pliku celów.