关于c#:如何使用过时的方法使编译失败


How do I cause the use of obsolete methods to fail compilation

我想将一个方法标记为过时的,如果从任何地方调用它,也会导致编译失败。

我在这里遇到了一个解决方案,如何将方法标记为已过时/已弃用?.

一个答案建议使用这种语法,说布尔修饰符将达到我想要的效果(编译失败)

1
 [Obsolete("Method1 is deprecated, please use Method2 instead.", true)]

然而,虽然这在同一个项目中有效,但在从另一个项目调用方法时却没有(我甚至让Visual Studio生产力增强工具为它显示了一个eror,但编译仍然成功)

这是设计的吗?或者有解决方法吗?


如果在同样被标记为已过时的方法或类中使用标记为已过时的内容,编译器将不会向您发出警告或错误。

在某些类中考虑以下过时的方法:

1
2
3
4
5
public class SomeClass
{
    [Obsolete("Don't use",true)]
    public static void ObsoleteMethod() { }
}

预期的行为是每当使用编译器时都会产生一个错误。

但是,如果在另一个过时的方法中使用它,甚至不会收到编译器警告。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class AnotherClass
{
    public void Method()
    {
        SomeClass.ObsoleteMethod();  // Compiler error
    }

    [Obsolete("Avoid use",false)]
    public void AnotherObsoleteMethod()
    {
        SomeClass.ObsoleteMethod(); // No error and no warning
    }
}

如果整个类标记为已过时,则也是如此:

1
2
3
4
5
6
7
8
[Obsolete()]
public class ObsoleteClass
{
    public void Method()
    {
        SomeClass.ObsoleteMethod(); // No error
    }
}