C # - вибірково придушити власні застарілі попередження


212

Я використовую Obsoleteатрибут (як тільки запропонували колеги-програмісти), щоб показати попередження, якщо використовується певний метод.

Чи є спосіб придушити попередження, подібне до CodeAnalysis ' SuppressMessageу місцях, де використання виправдане?

Для цього потрібно працювати, для [Obsolete("Some message")]чого генерується попередження 618 та звичайний [Obsolete]атрибут без повідомлення, яке створює попередження 612.

Відповіді:


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 перестає працювати, і я отримую попередження незалежно. Чи потрібен мені ще один ідентифікатор помилки?
Алекс

2
Знайдено це - правильний номер попередження - 618, якщо в атрибуті "Застаріле" є повідомлення. Дякую!
Алекс

2
Goodo - я налаштував свій приклад, щоб відповідати цьому.
Джон Скіт

6
@George: Ви можете їх знайти тут .
Jordão

3
Дивіться мою відповідь про те, як отримати номер попередження / помилки в першу чергу.
Аарон Тома

131

Намір , щоб відключити попередження для застарілого використання , незалежно від того, чи є конструкція , відмічені [Obsolete]або [Obsolete("Message")]. Тому використовуйте і CS0612, і CS0618 :

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 

3
Також зауважте, що попередження не виникають, якщо застаріле використання знаходиться в класі, який сам позначений як застарілий.
redcalx

3
Чи є спосіб відключити помилку, якщо ви Obsoleteпозначені як помилка?
Шиммі Вайцхандлер

2
@Shimmy: якщо вона позначена як помилка, то ви повинні її виправити, немає можливості придушити помилки. Це може бути проблема синтаксису, опублікуйте це як запитання на цьому веб-сайті, і ви обов'язково отримаєте хорошу відповідь.
Йордао

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. Тоді продовжуйте, як говорить Джон Скіт .

(Краще завжди продовжуйте так, як каже Джон Скіт …)


9

Ви шукаєте #pragmaдирективу відключення попередження

По суті, ви додаєте таку команду над сайтом виклику у файлі .cs.

#pragma warning disable 612
SomeMethodCall

612 - ідентифікатор повідомлення про помилку для виклику застарілих методів


Це працює лише в тому випадку, якщо я не надсилаю повідомлення зі своїм атрибутом застарілого. У мене є повідомлення, хоча таке: [Застаріле ("Ось чому це не слід використовувати - замість цього використовуйте XYZ.")]. Як тільки я поміщую повідомлення, попередження про прагму відключення 612 перестає працювати, і я отримую попередження незалежно. Чи потрібен мені ще один ідентифікатор помилки?
Алекс

2
Знайдено це - правильний номер попередження - 618, якщо в атрибуті "Застаріле" є повідомлення.
Алекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.