No, ObsoleteAttribute
is effectively hard-coded into the C# compiler - there's no way of creating your own attribute that the C# compiler will understand as indicating that a member is obsolete.
Personally I'd just go with ObsoleteAttribute
- is it really that bad that the error message starts with "X is obsolete"?