2009-06-09 7 views
170

J'utilise l'attribut Obsolete (comme suggéré par d'autres programmeurs) pour afficher un avertissement si une certaine méthode est utilisée.C# - Supprime sélectivement les avertissements obsolètes personnalisés

Existe-t-il un moyen de supprimer l'avertissement similaire à CodeAnalysis 'SuppressMessage aux points où l'utilisation est justifiée?

Merci!

EDIT

Ceci est pour [Obsolete("Some message")] que je dois inclure quelques détails sur l'avertissement. Cependant, une fois que je #pragma warning disable 612 ne fonctionne pas ajouté plus le message à l'attribut [Obsolete] nu ...

EDIT 2

trouvé le numéro d'avertissement droit - Il est si vous avez un message suivant l'attribut obsolète.

Donc, pour faire ce que je veux faire:

#pragma warning disable 618

puis après l'appel

#pragma warning restore 618

Merci à Jared Par Jon Skeet pour moi pointant dans la bonne direction !

Répondre

208

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

Restaurez l'avertissement après afin que vous ne manquerez pas les appels "mauvais".

+1

Cela ne fonctionne que si je ne donne pas de message avec mon attribut Obsolète. J'ai cependant un message comme celui-ci: [Obsolète ("Ceci est la raison pour laquelle ceci ne devrait pas être utilisé - utilisez plutôt XYZ.")]. Une fois que j'ai mis le message, l'avertissement pragma désactiver 612 cesse de fonctionner et je reçois des avertissements malgré tout. Ai-je besoin d'un autre identifiant d'erreur? – Alex

+1

Trouvé - Le numéro d'avertissement correct est 618 s'il y a un message dans l'attribut Obsolète. Je vous remercie! – Alex

+1

Goodo - J'ai ajusté mon exemple pour correspondre à cela. –

8

Vous cherchez l'avertissement #pragma désactiver directive

Essentiellement, vous ajoutez la commande suivante au-dessus du site d'appel dans le fichier .cs.

#pragma warning disable 612 
SomeMethodCall 

612 est le message d'erreur ID pour appeler des méthodes obsolètes

+0

Cela ne fonctionne que si je ne donne pas un message avec mon attribut obsolète. J'ai cependant un message comme celui-ci: [Obsolète ("Ceci est la raison pour laquelle ceci ne devrait pas être utilisé - utilisez plutôt XYZ.")]. Une fois que j'ai mis le message, l'avertissement pragma désactiver 612 cesse de fonctionner et je reçois des avertissements malgré tout. Ai-je besoin d'un autre identifiant d'erreur? – Alex

+2

Trouvé - Le numéro d'avertissement correct est 618 s'il y a un message dans l'attribut Obsolète. – Alex

96

Le but est de désactiver l'avertissement pour l'utilisation obsolète , indépendamment du fait que la construction est marquée avec [Obsolete] ou [Obsolete("Message")]. Il faut donc utiliser les deux CS0612etCS0618:

#pragma warning disable 612, 618 

... 

#pragma warning restore 612, 618 
+1

Merci. Cela a aidé :) – sandyiscool

+2

+1 pour mentionner à la fois 612 et 618. –

+2

Notez également que les avertissements ne se produisent pas si l'utilisation obsolète est dans une classe qui est elle-même marquée comme obsolète. – redcalx

15

est ici comment obtenir le numéro d'avertissement/erreur en premier lieu:

  1. Reconstruire votre projet.
  2. Accédez à la fenêtre Output.
  3. Recherchez la ligne de l'avertissement/erreur que vous souhaitez supprimer.
    Par exemple:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. Copiez le numéro de pièce après "CS". Puis procéder comme Jon Skeet says.

(Better toujours procéder comme Jon Skeet dit ...)

Questions connexes