2009-06-09 20 views
170

Estoy usando el atributo Obsolete (como lo sugirieron otros programadores) para mostrar una advertencia si se usa un método determinado.C# - Reprimir selectivamente advertencias obsoletas personalizadas

¿Hay alguna forma de suprimir la advertencia similar a CodeAnalysis 'SuppressMessage en los puntos donde el uso está justificado?

¡Gracias!

EDITAR

Esto es para [Obsolete("Some message")] ya que necesito para incluir algunos detalles acerca de la advertencia. Sin embargo, #pragma warning disable 612 ya no funciona una vez que agrego el mensaje al atributo desnuda [Obsolete] ...

EDIT 2

encontró que el número de aviso derecha - Es si tiene un mensaje similar al siguiente el atributo obsoleto.

Así que para hacer lo que quiero hacer:

#pragma warning disable 618

y luego después de la llamada

#pragma warning restore 618

Gracias a Jared Par y Jon Skeet para señalarme en la dirección correcta !

Respuesta

208

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

Restaurar la advertencia después para que no se perderá llamadas "malas".

+1

Esto solo funciona si no doy un mensaje con mi atributo Obsoleto. Tengo un mensaje como este: [Obsoleto ("Esta es la razón por la cual no se debe usar - use XYZ en su lugar"]). Una vez que coloco el mensaje, la advertencia de pragma desactiva 612 deja de funcionar y recibo advertencias independientemente. ¿Necesito otro ID de error, tal vez? – Alex

+1

Encontrado: el número de advertencia correcto es 618 si hay un mensaje en el atributo Obsoleto. ¡Gracias! – Alex

+1

Goodo: he ajustado mi ejemplo para que coincida con esto. –

8

Usted está buscando el #pragma advertencia directiva desactivar

Esencialmente se agrega el siguiente comando encima del lugar de la llamada en el archivo .cs.

#pragma warning disable 612 
SomeMethodCall 

612 es el mensaje de error de identificación de llamadas a métodos obsoletos

+0

Esto sólo funciona si no dar un mensaje con mi atributo obsoleto. Tengo un mensaje como este: [Obsoleto ("Esta es la razón por la cual no se debe usar - use XYZ en su lugar"]). Una vez que coloco el mensaje, la advertencia de pragma desactiva 612 deja de funcionar y recibo advertencias independientemente. ¿Necesito otro ID de error, tal vez? – Alex

+2

Encontrado: el número de advertencia correcto es 618 si hay un mensaje en el atributo Obsoleto. – Alex

96

La intención es desactivar la advertencia para el uso obsoletos , independientemente de si la construcción está marcado con [Obsolete] o [Obsolete("Message")]. Así que utilice tanto CS0612 y CS0618:

#pragma warning disable 612, 618 

... 

#pragma warning restore 612, 618 
+1

Gracias. Esto ayudó :) – sandyiscool

+2

+1 por mencionar 612 y 618. –

+2

También tenga en cuenta que las advertencias no ocurren si el uso obsoleto está en una clase que está marcada como obsoleta. – redcalx

15

Aquí es cómo obtener el número de error/advertencia en el primer lugar:

  1. Reconstruir su proyecto.
  2. Vaya a la ventana Output.
  3. Busque la línea de advertencia/error que desea suprimir.
    Por ejemplo:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. Copiar el número de pieza después "CS".
  5. Luego proceda como Jon Skeet says.

(Mejor siempre proceda como Jon Skeet dice ...)

Cuestiones relacionadas