C#-有选择地禁止自定义过时警告


212

Obsolete如果使用某种方法,我正在使用该属性(正如其他程序员所建议的那样)显示警告。

有没有一种方法可以SuppressMessage在合理使用时抑制类似于CodeAnalysis的警告?

谢谢!

编辑

这是[Obsolete("Some message")]因为我需要包含有关警告的一些详细信息。但是,#pragma warning disable 612一旦我将邮件添加到裸[Obsolete]属性中,它就不再起作用...

编辑2

找到了正确的警告编号- 如果您在过时的属性后显示一条消息,则为618

所以要做我想做的事:

#pragma warning disable 618

然后通话后

#pragma warning restore 618

感谢Jared Par和Jon Skeet为我指出正确的方向!

Answers:


257

用途#pragma warning disable

using System;

class Test
{
    [Obsolete("Message")]
    static void Foo(string x)
    {
    }

    static void Main(string[] args)
    {
#pragma warning disable 0618
        // This one is okay
        Foo("Good");
#pragma warning restore 0618

        // This call is bad
        Foo("Bad");
    }
}

之后恢复警告,这样您就不会错过“坏”电话。


1
仅当我不使用我的过时属性发送消息时,此方法才有效。我有这样一条消息:[已过时(“这就是为什么不应该使用此命令-而是使用XYZ。”)]。一旦将消息放入,编译指示警告禁用612就会停止工作,无论如何我都会收到警告。我是否需要另一个错误ID?
亚历克斯

2
找到它-如果“过时”属性中有消息,则正确的警告编号是618。谢谢!
亚历克斯

2
Goodo-我已经调整了我的示例以使其与此匹配。
乔恩·斯基特

6
@乔治:您可以在这里找到它们。
–Jordão

3
首先请参阅我关于如何获取警告/错误号的答案
亚伦·托马

130

意图是禁用过时警告使用,无论是否结构标有[Obsolete][Obsolete("Message")]。因此,请同时使用CS0612 CS0618

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 

3
另请注意,如果过时用法位于本身已标记为过时的类中,则不会发生警告。
redcalx

3
如果Obsolete标记为错误,是否还有一种方法可以禁用错误?
Shimmy Weitzhandler

2
@Shimmy:如果将其标记为错误,则必须对其进行修复,无法抑制错误。可能是语法问题,将其作为问题发布到本网站上,您肯定会得到一个好的答案。
Jordão酒店

18

首先,这是获取警告/错误号的方法:

  1. 重建您的项目。
  2. 转到输出窗口。
  3. 查找您要禁止的警告/错误行。
    例如:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. 复制的数字部分CS”。
  5. 然后按照Jon Skeet 所说的进行

(最好总是按照乔恩·斯基特所说的进行……)


9

您正在寻找#pragma警告禁用指令

本质上,您在.cs文件中的调用站点上方添加了以下命令。

#pragma warning disable 612
SomeMethodCall

612是用于调用过时方法的错误消息ID


仅当我不使用我的过时属性发送消息时,此方法才有效。我有这样一条消息:[已过时(“这就是为什么不应该使用此命令-而是使用XYZ。”)]。一旦将消息放入,编译指示警告禁用612就会停止工作,无论如何我都会收到警告。我是否需要另一个错误ID?
亚历克斯

2
找到它-如果“过时”属性中有消息,则正确的警告编号是618。
亚历克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.