We use the NuGet package restore functionality as part of our build. None of the packages are under source control, they are downloaded (from an internal subset of the public feed) before compilation.
Unfortunately, there is a slight shortcoming in some older versions of NuGet that results in far more requests being made than are strictly necessary. This was fixed in version 2.0, but that won’t be supported in TeamCity until 7.1 is released (currently EAP only).
For now, you can choose “custom” as your NuGet version:
and provide the path to NuGet.exe.
We saw a drastic improvement in build times (from 15-20 mins, down to under 5).