I admit that I never paid much attention to this, but I tried only for the sake of curiosity (Visual Studio 2012 Update 4).
With one project, as you described, I tried to switch configurations, and, oddly enough, when I change the configuration, the main project is built again:
But if I look at the output folder, the file is not updated (the modification time of each file is the same as the previous assembly), with the exception of vshost.exe (I disabled it but received the same message), then I tried to set the build log to be more detailed (Tools - Options Projects and Solutions - build and Run - MSBuild project build output output verbosity - Change from "Minimum" to "Normal" or "Details"):

Then I got the following output:
1>------ Build started: Project: ConsoleApplication1, Configuration: Release Any CPU ------ 1>Build started 06/10/2015 00:26:50. 1>GenerateTargetFrameworkMonikerAttribute: 1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files. 1>CoreCompile: 1>Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files. 1>_CopyAppConfigFile: 1>Skipping target "_CopyAppConfigFile" because all output files are up-to-date with respect to the input files. 1>CopyFilesToOutputDirectory: 1> ConsoleApplication1 -> c:\users\user\documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Release\ConsoleApplication1.exe 1> 1>Build succeeded. 1> 1>Time Elapsed 00:00:00.09 ========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
So, it seems that the project is not really being restored every time. If instead you find that everything will be restored (check the changed time on the dir output files), try increasing the volume of the build log, as I described, and see what happens. Hope this helps.
source share