I'm not sure that setting a date (in compiled "stone" in the binary) would necessarily be a good choice for most systems. Generally you'd want a more determinate environment where concrete actions like installing or uninstalling determines programmatic
behaviour.
To this extent ObsoleteAttribute is a 'softer' compile-time error construct, with no direct runtime ramifications. (Though of course these are normal reflectable attributes) Instead assembly versioning effectively manages your code's 'lifetime'. When the
method signature no longer exists you get your error. No ticking timebombs of badly chosen dates being embedded in a sealed library that you don't own.