I usually develop using the default Release configuration setting in Visual Studio. It generates faster code and smaller binaries. It’s a perfectly sane thing to do, and most people do the same.
Sometimes, however, something wrong happens and I need to switch to Debug mode:
Then, in order to debug what went wrong, I open several source files, set a lot of breakpoints, study the program flow:
Quite often, I wonder: “did my coworkers commit any code that might be relevant to my problem?” and I synchronise my tree:
git pull --rebase
This is where the nightmare begins.
If Core.vcproj was modified, the following modal dialog appears:
I click Reload. Then, if Engine.vcproj was modified, the following modal dialog appears:
Can you see where this is going? For each of the 50 projects in my solution that were modified, a modal dialog appears and I have no way to say “Yes to All”. Each and every single dialog appears.
When projects are finally reloaded, my tab line looks like this:
Fucking Visual Studio closed all the open tabs from the projects it reloaded! I have no way to reopen them as they were.
Anyway. I press F7 to rebuild the solution, and go take a drink, or switch to another task. A build takes several minutes.
When I come back, I notice this:
Fucking Visual Studio automatically switched my configuration mode back to Release! I just lost minutes of work because I needed a debug build, not a release build. And that tiny check box becomes another thing I need to constantly check in case the software attempts to change it behind my back.
So fuck you, Microsoft, for failing to handle project reloads in even the most slightly user-friendly way. And I shall no buy the “it is not a trivial thing to do” argument. When I close Visual Studio before syncing the tree, then open it again afterwards, I get no annoying avalanche of modal dialogs, my settings are in the expected configuration, and previously opened files are still here in tabs. I would totally do it if it didn't take several minutes to close and reopen the memory hog.