2010-04-23 13 views
20

Ich habe "Behandle Warnungen als Fehler" für mein VS Projekt aktiviert, was bedeutet, dass ich Fehler für fehlende Dokumentation bekomme (nette Erinnerung für dieses spezielle Projekt).Unterdrückungswarnung für generierten C# Code

Allerdings wird ein Teil des Codes von einem benutzerdefinierten Tool generiert, das keine XML-Dokumentation einfügt. Daher suche ich nach der fehlenden XML-Dokumentation nur für den generierten Code, nicht für das gesamte Projekt. Ich habe keinen Einfluss auf die tatsächliche generierte Datei und kann nichts wirklich in die Datei einfügen (da es häufig vom Tool neu generiert wird), also suche ich nach etwas außerhalb der generierten Datei (die generierten Klassen sind teilweise, wenn das hilft)

+1

@TomTom: Nun, ich sehe das nicht als eine gültige Lösung (und nennt ihn dumm ist ein wenig übertrieben, der Autor hat uns beide um 100k Punkte hier auf SO zu schlagen ...) –

Antwort

9

EDIT: Siehe Kommentare darauf hinweist, dass diese nicht mit C# 4 arbeiten. Ich bin nicht klar, ob es in früheren Versionen des Compilers funktionierte. Die C# 4-Spezifikation macht dies jedoch ziemlich klar. Abschnitt 2.5.8.1 heißt es:

A #pragma warning restore Richtlinie stellt alle oder die gegebene Menge von Warnungen an den Staat, die zu Beginn der Übersetzungseinheit in Kraft war. Beachten Sie, dass wenn eine bestimmte Warnung extern deaktiviert wurde, eine #pragma warning restore (ob für alle oder die angegebene Warnung) diese Warnung nicht wieder aktivieren wird.

Jeff hat eine workaround in a blog post - im Grunde, um automatisch generierten Code als Teil des Builds neu zu verarbeiten.


Als Tom sagt, können Sie ein „ignorieren“, um das gesamte Projekt (Build/Unterdrückt Warnungen - geben Sie 1591 als Warnung Nummer) - hinzufügen, aber dann können Sie wiederherstellen die Warnung, sich an der Spitze jede Ihrer nicht erzeugt Dateien:

#pragma warning restore 1591 

es ist ziemlich hässlich, aber es funktioniert (ich habe es gerade getestet).

+0

@TomTom : Inwiefern? Sie können eine Überprüfung, dass Sie dieses Pragma am Anfang jeder nicht generierten Datei haben, relativ einfach automatisieren. (Das OP hat vielleicht schon etwas, um nach Copyright-Vermerken usw. zu suchen - das könnte sehr leicht modifiziert werden, um dieses Pragma aufzunehmen.) Das Endergebnis ist, was das OP will: Fehler für handgeschriebene Dateien, die keine XML-Kommentare haben, und keine solchen Fehler für die generierten Dateien. –

+0

Akzeptieren Sie dies als die Antwort, da alle anderen nicht das Problem lösen, die generierte Datei nicht zu berühren ... netter, Jon –

+1

@Jon: Dies funktioniert nicht für C# 4. Entsprechend der Spezifikation, wenn die Warnung global ist deaktiviert (dh durch das Projekt), wird die Wiederherstellung auf diesen globalen Zustand zurückgesetzt (dh deaktiviert). Ich sollte hinzufügen, ich habe es versucht (ich habe nicht nur die Spezifikation gelesen). –

2

Das Beste, was Sie dabei tun können, ist das Unterdrücken der besonderen Warnung in dem Projekt, das den generierten Code enthält. Sie können dies in den Projekteigenschaften auf der Registerkarte Erstellen tun. Es ist nicht ideal, aber es ist das Beste, was Sie tun können, wenn Sie die Pragmas nicht in den generierten Code einfügen.

9

Der beste Weg, mit Warnungen oder Fehler-Code-Analyse auf generierten Code zu vermeiden, ist Ihre generierten Klassen mit den GeneratedCodeAttribute und machen die Code-Datei mit den * .generated.cs Mustern endet zu dekorieren.

Wenn der Code-Dateien auch einen Datei-Header haben, sollten Sie diese Tags hatte:

//---------------------- 
// <auto-generated> 
//  Tool description 
// </auto-generated> 
//---------------------- 

Dies ist nicht obligatorisch, aber wenn Sie Code-Datei-Header haben, ist es eine gute Praxis.

Auf diese Weise werden FxCop und andere Tools wie StyleCop Ihren Code nicht mehr analysieren.

Was anormal ist, ist, dass Ihr Codegenerierungstool Ihre Codeelemente mit dem oben genannten Attribut nicht dekodiert. Versuchen Sie zu prüfen, ob es eine Option gibt, die Sie in Ihren Tool-Einstellungen aktivieren können, oder wenden Sie sich an das Entwicklerteam.


EDIT: Hat die generierten Klassen Teilklassen sind und tun, um die tatsächlichen Klassen Namen und die Nummer ändert sich häufig? Wenn sich der generierte Codeinhalt nicht viel bewegt, können Sie einfach eine andere Codedatei erstellen und die generierte partielle Klasse deklarieren, um sie mit dem GeneratedCodeAttribute zu dekorieren. Einmal rettete es mein Leben (und meine Zeit!).

+1

"Ich habe keinen Einfluss auf die tatsächliche Datei generiert" - nicht diese Regel Diese Antwort? –

+0

Ich verstehe, was das Problem ist, hatte ich genau das gleiche Problem mit einem DSL aus Codeplex. Die Tatsache ist, dass, wenn es oft neu erstellt wird, Sie es nicht jedes Mal manuell ändern möchten. Was ich getan habe, ist das Ich kontaktierte den Codeplex-Entwickler, der das Problem behoben hat.Tatsächlich gibt es zwei Lösungen: Suchen nach einer Einstellung, die im Tool aktiviert werden kann, oder Kontakt mit dem Entwicklerteam – Ucodia

+0

@TomTom (und @TheRHCP): wie Jon hervorhebt, kann ich nicht kontrollieren der generierte Code also nicht gehen beim Hinzufügen von Attributen. Teilklassen lösen möglicherweise auch fehlende Kommentare zur Klasse, helfen aber nicht bei den Eigenschaften/Methoden. –

Verwandte Themen