Thanks for all your comments. On the basis of those comments, we've decided not to change the current behavior. There are two things I'd like to bring out.

First, thanks to Jacob for mentioning that you can set the default behavior. One of the problems we have with VS is that there is lots of functionality that people don't know about. I've added this to my "Things that people don't know about list". So, if you want to change the default, right click and choose "open with". This works for both Windows forms and ASP projects.

The second concerns options. There were several comments that say, "make it an option, so people can choose", and then Monte Hansen said, "I think there needs to be a gatekeeper for project-level options and if it were me, this one wouldn't make it".

I agree with that sentiment. In some cases, you have to provide flexibility - for example, if you had a feature that said "braces must go on the line after the if statement", you would make lots of people unhappy. That would be a Bad Thing.

But there are other cases where adding an option is is the simple way out - either because a team can't agree on what should or shouldn't be there, or because the team hasn't worked hard enough on what the customer wants (these may really be the same thing - not knowing your customers well enough). It's easy to say "let's make it an option", but in a product like Visual Studio, there are already too many opaque options. There may be some interesting ways of fixing this - like making the options that pertain to a window actually be accessible from that window - but in the category of options, fewer is already better.

I was looking through the options in VS2003 for one where I could say, "Does anybody ever set this option". I had just read Mark's comment:

One feature that disappeared between 2002 and 2003 that really drives me nuts, was that when you changed between document tabs the project tree view would update to select the current page you are viewing

and what do I find? Under "Projects and Solutions", there's an option named "Track active item in solution explorer" that I think does what Mark wants. We didn't take the feature away, but we did do a good enough job of hiding it that it appeared that it was missing. That's a good indication of why "make it an option" can be a bad choice - we put effort both into coding something, making it an option, and then testing it, but we hide it so that our users get little benefit from it. Many times the effort to do this just isn't worth the return, as an unfound option is no different than a feature that doesn't exist.

We had a similar situation back when I was on the C++ compiler team. User asked us for more information to help them find problems in their code, and there were a number of situations that the compiler could identify. Unfortunately, in many cases, the compiler would warn on perfectly reasonable code, and since many people compile with "warn as error" on, we couldn't make them level 2 warnings, as it would break lots of existing code.

So we made them level 4 warnings, but the result was that since the default was level 2, almost nobody got any benefit out of the work that we did, so we stopped adding new ones.

Thanks again for your comments