我注意到Visual Studio处理使用标记为的代码的方式有所不同ObsoleteAttribute
。
假设一些代码调用了带有此属性标记的方法。
如果属性是这样应用的:
[Obsolete]
void Foo() { ... }
然后Visual Studio将使用Foo
绿色下划线突出显示的任何用法,并且它们将在警告列表中显示在错误列表窗格中。
但是,如果您这样做:
[Obsolete("message")]
void Foo() { ... }
那么VS几乎会忽略的使用Foo
。没有警告。如果将鼠标悬停在它上面,则只会看到它“已弃用”。
这种差异让我感到惊讶……我找不到任何解释其原因的参考文献(示例未提及)。
这种行为无济于事(至少在我的情况下),因为人们实际上忽略了这些情况并使用了已弃用的代码-尽管消息的重点是帮助告知他们。我真的很希望他们看到警告。
有没有办法让VS以相同的方式处理这两种情况?即,将它们都视为正常警告?
我知道属性构造函数存在重载,可以强制将其视为错误,但这不是我要问的。
我正在使用VS 2019,.NET472项目。
一条评论询问我们是否有任何#pragma
行可以禁用警告。这是在代码中对编译指示的单一使用:
#pragma warning disable CS0168
catch (IOException ex)
#pragma warning restore CS0168
这显然不使用Obsolete
,因此我不知道它如何关联。而CS0168似乎并没有与此相关的任何。
这是Warning level
对的设置Build
驱动此行为的配置。
如果在ObsoleteAttribute
没有消息的情况下应用,则会导致CS0612
警告,
即level 1
。
编译器警告(等级1)CS0612
而ObsoleteAttribute
带有消息的会导致CS0618
警告,
即level 2
。
编译器警告(等级2)CS0618
将您的警告级别设置为1
会忽略CS0618
,但将其恢复为4
,则将其作为默认设置显示为警告。
[Obsolete] // CS0612
public static void DoSomething() { }
[Obsolete("obsolete with custom message")] // CS0618
public static void DoSomethingElse() { }
static void Main(string[] args)
{
DoSomething();
DoSomethingElse();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句