I found out when using java (long time ago) that type-specific exceptions were a bit an overkill specially when you have to follow guidelines and implement an specific design. I end up using the "throws" keyword everywhere and only taking care of exceptions
that were expected from the design itself.
I must say that i do not miss it when using .NET at all.
Furthermore, I bevelieve Don Box has mentioned somewhere that, the main job of a programmer is to create more and more abstractions on top of existing ones.
The .NET framework has done programmers the favor in abstracting a lot of the Hardware from our code consequently production will increase as control over the underlying systems decreases. I believe this is great since history may be able to repeat itself again.
Remember when thousands of transistors together used to be public available in a circuit? Now they are all abstracted and closed in an IC lowering cost of manufactoring and increasing productivity. I strongly believe that managed code may also abstract underlying
systems (or logical systems) in order to increase productivity or maybe even field replacement, who knows?