C# - 有选择地抑制自定义过时警告

Ale*_*lex 204 c# visual-studio-2008

我正在使用该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为我指明正确的方向!

Jon*_*eet 247

用途#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");
    }
}
Run Code Online (Sandbox Code Playgroud)

之后恢复警告,这样你就不会错过"坏"的电话.

  • @George:你可以找到它们[这里](http://msdn.microsoft.com/en-us/library/ms228296.aspx). (6认同)
  • 有关如何获取警告/错误编号的信息,请参阅我的[答案](http://stackoverflow.com/questions/968293/c-sharp-selectively-suppress-custom-obsolete-warnings#9751124). (3认同)
  • 找到它 - 如果Obsolete属性中有消息,则正确的警告编号为618.谢谢! (2认同)
  • Goodo - 我已经调整了我的例子来匹配这个。 (2认同)
  • @Tormod:不,我不相信你可以忽略一个过时的错误属性。您可能会使用条件编译 - 引入一个新的构建配置,该配置不会将它们作为错误,并且仅在那里运行单元测试。或者(丑陋地)使用反射...... (2认同)

Jor*_*dão 125

意图是禁用过时警告使用,无论是否结构标有[Obsolete][Obsolete("Message")].所以同时使用CS0612 CS0618:

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法禁用错误,以防"Obsolete"被标记为错误? (3认同)
  • 另请注意,如果过时的用法位于本身标记为过时的类中,则不会出现警告. (2认同)
  • @Shimmy:如果它被标记为错误,那么你必须修复它,没有办法压制错误.这可能是一个语法问题,在本网站上将其作为一个问题发布,你肯定会得到一个很好的答案. (2认同)

Aar*_*oma 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的说法继续进行.

(最好总是Jon Skeet所说的那样......)


Jar*_*Par 9

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

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

#pragma warning disable 612
SomeMethodCall
Run Code Online (Sandbox Code Playgroud)

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

  • 找到它 - 如果Obsolete属性中有消息,则正确的警告编号为618. (2认同)