C #: elimina selettivamente gli avvisi obsoleti personalizzati


212

Sto usando l' Obsoleteattributo (come appena suggerito dai colleghi programmatori) per mostrare un avviso se viene utilizzato un determinato metodo.

Esiste un modo per sopprimere l'avvertenza simile a CodeAnalysis ' SuppressMessagenei punti in cui l'uso è giustificato?

Questo deve funzionare per il [Obsolete("Some message")]quale genera un avviso 618 e l' [Obsolete]attributo plain senza messaggio che genera un avviso 612.

Risposte:


257

Utilizzare #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");
    }
}

Ripristina successivamente l'avviso in modo da non perdere le chiamate "errate".


1
Funziona solo se non do un messaggio con il mio attributo Obsoleto. Ho un messaggio come questo: [Obsoleto ("Questo è il motivo per cui questo non dovrebbe essere usato - usa invece XYZ.")]. Una volta inserito il messaggio, l'avviso pragma disabilita 612 smette di funzionare e ricevo avvisi indipendentemente. Ho bisogno di un altro ID errore invece forse?
Alex,

2
Trovato: il numero di avviso corretto è 618 se è presente un messaggio nell'attributo Obsoleto. Grazie!
Alex,

2
Goodo - Ho adattato il mio esempio per adattarlo a questo.
Jon Skeet,

6
@George: puoi trovarli qui .
Jordão,

3
Vedi la mia risposta su come ottenere il numero di avviso / errore in primo luogo.
Aaron Thoma,

131

L' intento è disabilitare l'avviso per uso obsoleto , indipendentemente dal fatto che il costrutto sia contrassegnato con [Obsolete]o [Obsolete("Message")]. Quindi usa sia CS0612 che CS0618 :

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 

3
Si noti inoltre che gli avvisi non si verificano se l'utilizzo obsoleto è in una classe contrassegnata come obsoleta.
redcalx,

3
C'è un modo per disabilitare anche un errore, nel caso in cui sia Obsoletestato contrassegnato come errore?
Shimmy Weitzhandler,

2
@Shimmy: se è contrassegnato come errore, è necessario correggerlo, non è possibile eliminare gli errori. Potrebbe essere un problema di sintassi, pubblicarlo come una domanda su questo sito e avrai sicuramente una buona risposta.
Jordão,

18

Ecco come ottenere il numero di avviso / errore in primo luogo:

  1. Ricostruisci il tuo progetto.
  2. Vai alla finestra Output .
  3. Cerca la riga dell'avviso / errore che desideri eliminare.
    Per esempio:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. Copia la parte numerica dopo " CS".
  5. Quindi procedere come dice Jon Skeet .

(Meglio procedere sempre come dice Jon Skeet ...)


9

Stai cercando la #pragmadirettiva di disabilitazione degli avvisi

In sostanza, aggiungi il seguente comando sopra il sito di chiamata nel file .cs.

#pragma warning disable 612
SomeMethodCall

612 è l'ID del messaggio di errore per la chiamata di metodi obsoleti


Funziona solo se non do un messaggio con il mio attributo Obsoleto. Ho un messaggio come questo: [Obsoleto ("Questo è il motivo per cui questo non dovrebbe essere usato - usa invece XYZ.")]. Una volta inserito il messaggio, l'avviso pragma disabilita 612 smette di funzionare e ricevo avvisi indipendentemente. Ho bisogno di un altro ID errore invece forse?
Alex,

2
Trovato: il numero di avviso corretto è 618 se è presente un messaggio nell'attributo Obsoleto.
Alex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.