Ahem ... MSDN on this topic is silent, but empirically managed to find out the following:
Suppose we have such a primitive class hierarchy
class A { public virtual void foo() { } } class B : A { [Obsolete("don't use it", true)] public override void foo() { } }
Then there is a warning
Warning CS0809 The member with the "obsolete" attribute "B.foo ()" overrides the member without the "obsolete" attribute "A.foo ()"
And this attribute is simply ignored in the future, despite the explicit instructions to generate an error.
I do not pretend to be true, but I have great reason to believe that in this case the studio behaves correctly, because such a technique is essentially equivalent to trying to lower the level of access in the class of the heir, and this is a violation of the principle of strictly extending inheritance in the PLO. So either you need to mark the base class method as obsolete, which is impossible in your case, or use another method of isolation, for example, encapsulate an object of the inheritance class into a wrapper class in which you can provide only the necessary methods, but the wrapper class itself must not inherit from base, not derived from, problem classes.