It shouldn't build any project that you haven't changed since it was last
built. Have you not noticed the 'Project1 - up to date.' message in the
compilation output sometimes?
That's on a project level. But on a file level, C# has to recompile all
files of a project if any of the project has changed, as it doesn't have any
concept of precompiled headers in the same way that C++ does. There's no way
of avoiding that.
Although C# is a lot faster to compile than C++ is!