If I flag a property of a class as Obsolete, and then access that property, the access is flagged with a warning.
However, if I in the code that accesses the property just move on to sub-properties of the returned object, the compiler doesn't complain.
Attached is example source code. There's four lines near the bottom, marked #1-#4. I'd expect all of them to be flagged as using an obsoleted property. #3 isn't, however. Note that it accesses the same property that #4 does, which is flagged with a warning, but #3 moves on to read the .Count property of the object returned, whereas #4 simply gets the collection object.
Edit: After getting some answers on StackOverflow.com I'm posting the link to that question here: http://stackoverflow.com/questions/577132/why-are-c-collection-properties-not-flagged-as-obsolete-when-calling-properties
In particular, note Jon's and Marc's comments about both mono and the .NET 2.0 compiler getting it right, but the 3.5 doesn't. There's also a shorter code-example there from Marc.