I pretty much agree with you, if the client doesn't have any in-house expertise and stays hands-off then you get the scenario I described but outsourcing can work if it's in addition to in-house expertise.
In this case the client didn't want .Net 3.0 experts to support a legacy app, that's what the consultants built it in and then let it turn into legacy by not performing regular maintenance.
The client didn't know that it was becoming legacy until it was too late because they never developed the in-house expertise to understand what was necessary and the consultants have no incentive to do it by themselves. In fact they can charge more by letting it rot and requiring development of a whole new project to replace the legacy.
In this case the client didn't want .Net 3.0 experts to support a legacy app, that's what the consultants built it in and then let it turn into legacy by not performing regular maintenance.
The client didn't know that it was becoming legacy until it was too late because they never developed the in-house expertise to understand what was necessary and the consultants have no incentive to do it by themselves. In fact they can charge more by letting it rot and requiring development of a whole new project to replace the legacy.