In Visual Studio kann ich die Option "Warnungen als Fehler behandeln" auswählen, um zu verhindern, dass mein Code kompiliert wird, wenn Warnungen vorhanden sind. Unser Team verwendet diese Option, aber es gibt zwei Warnungen, die wir als Warnungen behalten möchten.
Es gibt eine Option zum Unterdrücken von Warnungen, aber wir möchten, dass sie als Warnungen angezeigt werden, damit dies nicht funktioniert.
Es scheint, dass die einzige Möglichkeit, das gewünschte Verhalten zu erzielen, darin besteht, eine Liste aller C # -Warnnummern in das Textfeld "Spezifische Warnungen" einzugeben, mit Ausnahme der beiden, die als Warnungen behandelt werden sollen.
Neben den Wartungsproblemen besteht der größte Nachteil dieses Ansatzes darin, dass einige Warnungen keine Nummern enthalten und daher nicht explizit referenziert werden können. Beispiel: "Diese Referenz konnte nicht aufgelöst werden. Die Assembly 'Daten ....' konnte nicht gefunden werden."
Kennt jemand einen besseren Weg, dies zu tun?
Klärung für diejenigen, die nicht sofort sehen, warum dies nützlich ist. Überlegen Sie, wie die meisten Warnungen funktionieren. Sie sagen Ihnen, dass in dem Code, den Sie gerade geschrieben haben, etwas nicht stimmt. Es dauert ungefähr 10 Sekunden, um sie zu reparieren, und das hält die Codebasis sauberer.
Die Warnung "Veraltet" unterscheidet sich stark davon. Manchmal bedeutet das Beheben nur das Konsumieren einer neuen Methodensignatur. Wenn jedoch eine ganze Klasse veraltet ist und Sie sie in Hunderttausenden von Codezeilen verwenden, kann die Korrektur Wochen oder länger dauern. Sie möchten nicht, dass der Build so lange unterbrochen wird, aber Sie möchten auf jeden Fall eine Warnung dazu sehen. Dies ist nicht nur ein hypothetischer Fall - das ist uns passiert.
Literale "#warning" -Warnungen sind ebenfalls einzigartig. Ich möchte es oft einchecken, aber ich möchte den Build nicht brechen.
Antworten:
Sie können
WarningsNotAsErrors
der Projektdatei ein -tag hinzufügen .Hinweis:
612
und618
sind beide Warnungen über abgekündigt, weiß nicht den Unterschied , aber das Projekt i auf gerade arbeite berichtet Obsolete mit 618 Warnung.quelle
[Obsolete]
Mitglieder, bei denen dasmessage
ist,null
als Fehler behandeln, während diejenigen, bei denen das gesetztmessage
ist, nur Warnungen bleiben. Wenn dererror
Parameter gesetzt isttrue
in derObsoleteAttribute
wird ein CS0619 stattdessen erzeugt. Dies scheint nicht funktionieren , wennmessage
istnull
(aber wer täte[Obsolete(null, true)]
sowieso?).--warnaserror-:618,1030
das Feld Build-> Other Flags. Diese Projektoption ist für F # -Projekte noch nicht implementiert. github.com/Microsoft/visualfsharp/issues/3395<NoWarn>
, was in den meisten Fällen minderwertig ist und nicht<WarningsNotAsErrors>
in die Benutzeroberfläche eingefügt werden konnte. Ein großes Lob./ warnaserror / warnaserror-: 618
quelle
MSBUILD : error MSB1001: Unknown switch. Switch: /warnaserror-:618
oder genauer gesagt in Ihrem Fall:
/ warnaserror / warnaserror-: 612,1030,1701,1702
Dies sollte alle Warnungen als Fehler behandeln, mit Ausnahme derjenigen in Ihrer durch Kommas getrennten Liste
quelle
Warum möchten Sie weiterhin Warnungen sehen, die Sie nicht als Fehler behandeln? Ich bin verwirrt darüber, warum dies wünschenswert ist - entweder Sie reparieren sie oder Sie tun es nicht.
Würden zwei verschiedene Build- / Lösungsdateien funktionieren - oder wäre ein Skript zum Kopieren einer und zum Ändern der Warnungen / Warnstufe geeignet? Es scheint, dass Sie vielleicht möchten, dass einige Ausführungen des Compilers kreischen, andere aber Sie möchten weitermachen.
Verschiedene Compiler-Switches scheinen also ein guter Weg zu sein. Sie können dies mit verschiedenen Zielen tun - einem mit Debug oder Release gekennzeichneten und einem mit den Warnungen entsprechend gekennzeichneten Zielen.
quelle
Ich verwende Warnungen als Fehler behandeln.
In seltenen Fällen, wenn eine akzeptable Warnung angezeigt wird (z. B. Verweisen auf veraltete Mitglieder oder fehlende Dokumentation zu XML-Serialisierungsklassen), muss diese explizit mit #pragma disable unterdrückt werden (und optional kann ein Grund dafür angegeben werden, dass kein sauberer Code vorhanden ist als Kommentar mit).
Das Vorhandensein dieser Richtlinie ermöglicht es auch herauszufinden, wer diese Warnverletzung akzeptiert hat (durch "Schuld" -Aktion der Versionskontrolle), falls es einige Fragen gibt.
quelle
Warum nicht einfach eine Regel haben, die besagt: "Wer Code mit einer anderen Warnung als 612, 1030, 1701 oder 1702 eincheckt, muss zum Whiteboard gehen und hundertmal schreiben." Ich werde keinen Code mit unzulässigen Warnungen erneut einchecken. '"
quelle
Pragma-Warnung (C # -Referenz)
Eine Pragma-Warnung kann verwendet werden, um bestimmte Warnungen zu aktivieren oder zu deaktivieren.
http://msdn.microsoft.com/en-us/library/441722ys(VS.80).aspx
quelle
Es scheint mir, dass das Hauptproblem in der Tat darin besteht, dass Sie Warnungen als Fehler behandeln, wenn dies eindeutig nicht der Fall ist, und dass Sie offensichtlich Check-ins zulassen, die dies verletzen. Wie Sie sagen, möchten Sie trotz einer Warnung weiterarbeiten können. Sie haben nur einige Warnungen erwähnt, die Sie ignorieren möchten, aber was ist, wenn jemand anderes im Team eine andere Art von Warnung verursacht, deren Behebung ebenso lange dauern würde? Möchten Sie das nicht auch ignorieren können?
Die logische Lösung wäre, entweder 1) Checkins nicht zuzulassen, wenn der Code nicht kompiliert wird (was bedeutet, dass diejenigen, die die Warnungen erstellt haben, diese korrigieren müssen, da sie den Build tatsächlich abgebrochen haben) oder 2) Warnungen als Warnungen zu behandeln. Erstellen Sie zwei Build-Konfigurationen, eine, die Warnungen als Fehler behandelt, die regelmäßig ausgeführt werden können, um sicherzustellen, dass der Code warnungsfrei ist, und eine andere, die sie nur als Warnungen behandelt und es Ihnen ermöglicht, auch dann zu arbeiten, wenn eine andere Person eine Warnung eingeführt hat.
quelle