web-dev-qa-db-fra.com

"Traitez tous les avertissements comme des erreurs sauf ..." dans Visual Studio

Dans Visual Studio, je peux sélectionner l'option "Traiter les avertissements comme des erreurs" pour empêcher la compilation de mon code s'il existe des avertissements. Notre équipe utilise cette option, mais nous souhaitons conserver deux avertissements.

Il y a une option pour supprimer les avertissements, mais nous voulons qu'ils apparaissent comme des avertissements, donc cela ne fonctionnera pas.

Il semble que la seule façon d'obtenir le comportement souhaité consiste à entrer une liste de chaque numéro d'avertissement C # dans la zone de texte "Avertissements spécifiques", à l'exception des deux que nous voulons traiter comme des avertissements.

Outre les maux de tête liés à la maintenance, le plus gros inconvénient de cette approche est que quelques avertissements n'ont pas de chiffres, ils ne peuvent donc pas être référencés explicitement. Par exemple, "Impossible de résoudre cette référence. Impossible de localiser l'assembly 'Data ....'"

Quelqu'un connaît-il une meilleure façon de procéder?


Clarifier pour ceux qui ne voient pas immédiatement pourquoi cela est utile. Pensez au fonctionnement de la plupart des avertissements. Ils vous disent que quelque chose est un peu décalé dans le code que vous venez d'écrire. Il faut environ 10 secondes pour les réparer, et cela maintient la base de code plus propre.

L'avertissement "Obsolète" est très différent de cela. Parfois, le corriger signifie simplement consommer une nouvelle signature de méthode. Mais si une classe entière est obsolète et que vous l'utilisez dispersée sur des centaines de milliers de lignes de code, cela peut prendre des semaines ou plus à corriger. Vous ne voulez pas que la construction soit interrompue aussi longtemps, mais vous voulez vraiment voir un avertissement à ce sujet. Ce n'est pas seulement un cas hypothétique - cela nous est arrivé.

Les avertissements littéraux "#warning" sont également uniques. J'ai souvent veux pour le vérifier, mais je ne veux pas casser la construction.

117
Neil

Vous pouvez ajouter une balise WarningsNotAsErrors- dans le fichier de projet.

<PropertyGroup>
    ...
    ...
    <WarningsNotAsErrors>618,1030,1701,1702</WarningsNotAsErrors>
</PropertyGroup>

Remarque: 612 et 618 sont tous deux des avertissements sur Obsolète, je ne connais pas la différence mais le projet sur lequel je travaille rapporte Obsolète avec l'avertissement 618.

143
SvenL

/ warnaserror/warnaserror-: 618

12
dave

ou plus précisément, dans votre cas:

/ warnaserror/warnaserror-: 612,1030,1701,1702

cela devrait traiter tous les avertissements comme des erreurs, à l'exception de ceux de votre liste séparée par des virgules

3
dave

Pourquoi voulez-vous continuer à voir des avertissements que vous ne traitez pas comme des erreurs? Je ne comprends pas pourquoi cela est souhaitable - soit vous les réparez, soit vous ne le faites pas.

Deux fichiers de construction/solution différents fonctionneraient-ils - ou un script pour en copier un, puis modifier le niveau d'avertissements/d'avertissement conviendrait-il? Il semble que vous souhaitiez peut-être que certaines exécutions du compilateur se fassent entendre, mais d'autres que vous souhaitez continuer.

Donc, les différents commutateurs du compilateur semblent être une bonne façon de procéder. Vous pouvez le faire avec différentes cibles - l'une étiquetée debug ou release et les autres étiquetées de manière appropriée sur les avertissements.

1
Tim

J'utilise les avertissements comme des erreurs.

Dans de rares cas, lorsqu'un avertissement acceptable apparaît (c'est-à-dire référençant un membre obsolète ou une documentation manquante sur les classes de sérialisation XML), il doit être explicitement supprimé avec #pragma disable (et éventuellement une raison pour ne pas avoir un code propre pourrait être fourni en tant que commentaire).

La présence de cette directive permet également de découvrir, qui a accepté cette violation d'avertissement (par action "blâmer" du contrôle de version) en cas de questions.

1
Rinat Abdullin

Pourquoi ne pas simplement avoir une règle disant: "Quiconque vérifie le code avec un avertissement autre que 612, 1030, 1701 ou 1702 doit y aller sur le tableau blanc et écrire cent fois" Je ne vérifierai plus le code avec des avertissements non autorisés. ""

0
erikkallen