C# CS0672:成员“Foo.OnSelected()';覆盖过时的成员'Baz.OnSelected()';

C# CS0672:成员“Foo.OnSelected()';覆盖过时的成员'Baz.OnSelected()';,c#,.net,visual-studio-2008,compiler-construction,compiler-errors,C#,.net,Visual Studio 2008,Compiler Construction,Compiler Errors,在我的DLL中,我使用System.ObsoleteAttribute将一个虚拟方法标记为过时,但这并没有产生我预期的警告 DLL源(Baz): [Obsolete("This method has become obsolete, please override `OnEnable` instead.")] public virtual void OnSelected() { } public virtual void OnEnable() { } // CS0672 - Doesn't

在我的DLL中,我使用
System.ObsoleteAttribute
将一个虚拟方法标记为过时,但这并没有产生我预期的警告

DLL源(Baz):

[Obsolete("This method has become obsolete, please override `OnEnable` instead.")]
public virtual void OnSelected() {
}

public virtual void OnEnable() {
}
// CS0672 - Doesn't show useful message...
public override void OnSelected() {
}
用户来源(Foo):

[Obsolete("This method has become obsolete, please override `OnEnable` instead.")]
public virtual void OnSelected() {
}

public virtual void OnEnable() {
}
// CS0672 - Doesn't show useful message...
public override void OnSelected() {
}
生成项目时会记录以下警告:

CS0672:成员
Foo.OnSelected()
覆盖过时成员
Baz.OnSelected()

将过时属性添加到'Foo.OnSelected()'


但我希望我的自定义过时消息在该警告中占主导地位,以便我的客户可以按照提供的说明进行操作。有没有办法做到这一点?

您可以向属性构造函数添加第二个参数,告诉编译器抛出编译错误(而不是通常的“方法已过时”警告),错误将使用属性的消息只有调用该方法时才会发生错误。

[Obsolete("This method has become obsolete, please override `OnEnable` instead.", true)]
public virtual void OnSelected() {
}

请注意,这不会删除CS0672警告。

请展示您的工作。您的客户会使用源程序集还是已编译的程序集?@Trajan客户引用已编译的程序集。