This is a braindump:
1. Developer did not check all the files in, or developer doesn't have the latest files (sometimes TFS hiccups getting latest dlls files).
2. Different modes (release vs. debug). Either #if DEBUG, or project is unmarked in configuration manager.
3. Different bin structure - each project gets its own (Default for visual studio), vs. single shared bin for all (default for TFS). This is especially common when different versions of the same assembly is referenced in multiple projects in the same solution.
4. Different platform/configuration
5. The build is running other steps (perhaps a packaging or command-line unit tests)
6. Different bitness, say developer workstation is 64-bit, but build server is 32-bit, and some extra step breaks because of this.
7. Rebuild-vs-build. Developer not running a rebuild. Hence there's an error in creating a dll, but it already exists on dev machine due to some other process, but build server fails.
8. Workspace mapping is incorrect – TFS not getting all the files it needs
9. Unit test code coverage – visual studio (at least 2008) can be very brittle running command line unit tests and code coverage.
10. Treat warnings as compile errors – depending on your process, the build server may fail on these, but Visual studio may only flag you with a warning (which dev ignores)