NuGet is certainly a better approach then having the assemblies on a shared drive, so I'm glad to see you're moving in that direction.
As for automatically building consuming projects after a dependant project has been built, you have a few options to trigger the build. Either:
- Use the NuGet build trigger
This allows triggering a build when a new package version is added.
- Set up a build dependency between the project.
The next part is tricky and you have a few (tough) choices.
The challenge you have is packages are defined in packages.config and while you can update the package using NuGet update, you need to decide if you want TeamCity to check in the changes. So some ideas on what you can do are:
- Check if a package update is available (using NuGet update) and fail the build if there is. This is used as a notification to developers to then manually update the package and deal with any integration issues that may arise.
- Update the packages and check in packages.config. This should be done on a new build configuration which is triggered when a new dependency is available. As this will create a check in, your existing project build will run using the new packages.config.
I would suggest starting with 1) and then move on to 2) when you're feeling confident with the workflow and things aren't going wrong.
What you are trying to do is quite tough, so I hope I've given you more solutions to consider. But I think it's a worthwhile exercise that will help you in the long run. Unfortunately there isn't a one size fits all so you'll have to experiment and mature your processes.
While TeamCity is a great system, it does fall short specifically in how you are attempting to use it. I suggest having a look at ThoughWorks GO. It's better suited for what you are trying to achieve, but unfortunately not as intuitive and mature as TeamCity.
http://www.go.cd