2009-07-15 5 views
1

Ich schreibe gerade ein Werkzeug, das die FxCop-Logdatei auf einer großen Codebasis analysiert. Mein Ziel ist es, grafische Informationen über die häufigsten Warnungen, sortiert nach Namespace (Subsysteme der Anwendung), bereitzustellen.Parsing FxCop Logfile - wie würdest du es tun?

See example graphic.

Dies kann dann über eine Diskussion verwendet werden, um die FxCop Regeln wir uns interessieren und welche Maßnahmen sollten sie zu entfernen, durchgeführt werden.

Die Protokolldatei enthält zwei Arten von Einträgen. Eine, in der der Namespace aus der Zeile selbst abgeleitet werden kann und eine, die das nicht tut. Siehe die folgenden Beispiele:

Sie können sehen, dass diese Warnung zum Namespace CompanyName.Common gehört.

[Any CPU/Release] d:\Bld\CompanyName\2010_MAIN_F\Sources\CompanyName\Utilities\Logging\Store\EventViewer\NativeHelper.cs(254,0): warning : CA1307 : Microsoft.Globalization : 'NativeHelper.GetSid(string, out IntPtr)' makes a call to 'string.IndexOf(string)' that does not explicitly provide a StringComparison. This should be replaced with a call to 'string.IndexOf(string, StringComparison)'. 
[Any CPU/Release] (-1,0): warning : CA1823 : Microsoft.Performance : It appears that field 'NativeHelper.IIsApplicationPoolSettingProperty' is never used or is only ever assigned to. Use this field or remove it. 
[Any CPU/Release] (-1,0): warning : CA1823 : Microsoft.Performance : It appears that field 'NativeHelper.IIsSettingProperty' is never used or is only ever assigned to. Use this field or remove it. 

In diesem Eintrag können Sie die letzten zwei Warnungen in einem Namespace nicht auflösen. Sie müssen in die erste Zeile zurückkehren, um daraus abzuleiten, dass es sich um den Namensraum CompanyName.Utilities handelt.

Wie würden Sie mit dieser Situation umgehen? Ich bin nicht auf der Suche nach einer 100% idiotensicheren Identifikation, aber ich möchte die meisten Warnungen auf einen entsprechenden Namespace auflösen können.

Meine Strategie so weit: Ich erwäge einen zwei Pass-Parser. Zuerst werde ich die Zeilen analysieren, in denen Informationen aus der gleichen Zeile abgeleitet werden können. Im zweiten Durchlauf werde ich nach den Zeilen suchen, die keine Namespace-Informationen enthalten, und von dieser Position zurück zur ersten Zeile mit Namespace-Informationen zurückkehren.

Ich habe nicht die Möglichkeit, FxCop XML generieren zu lassen. Team Foundation Server erstellt die einzelnen FxCop-Dateien in XML für jede Assembly, aber die Datei, die die GESAMTE Protokolldatei enthält, ist in dem Format wie oben beschrieben.

Haben Sie bessere Ideen oder Vorschläge?

Große Vorschläge so weit! Einige zusätzliche Informationen zur Logdatei. Diese Protokolldatei wird von einem Team Foundation Server-Teambuild generiert. Ich weiß nicht, ob es möglich ist, daraus eine XML-Version zu erstellen.

+0

Entschuldigung, das war für ein Kundenprojekt und ich habe den Code nicht behalten. – Sardaukar

+0

es ist schade, ich möchte gute Fxcop Ergebnisse Parser, vielleicht wie http://grepcode.com/file/repo1.maven.org/maven2/org.jvnet.hudson.plugins/violations/0.7.7/hudson/plugins /violations/types/fxcop/FxCopParser.java, aber es ist in Java Sprache. Es wäre nur interessant FxcopParser.cs für C#. – Kiquenet

Antwort

0

Gute Antworten, aber ich habe nur Zugriff auf die Plain Logfile in ASCII, so dass ein XSLT hier nicht funktioniert.

Ich habe es gelöst, indem ich meinen eigenen Parser geschrieben habe, der versucht, aus jeder Zeile einen Namespace abzuleiten. Wenn eine Zeile mit einer Warnung keinen Namespace enthält, wird der zuletzt gefundene Namespace verwendet.

Funktioniert ausgezeichnet.

0

Sie können die Ausgabe im XML-Format erhalten, die dies durch Verschachteln der Berichte anspricht.

Das, plus eine Dosis von XSLT, können Sie eine schön formatierte HTML-Seite bekommen - die im Idealfall sollte nur aussehen

Collated style report for solution: 0 messages 

Generated: 13/07/2009 11:23:49 
1

Run FxCop, so dass Sie einen XML-Bericht erhalten, paaren sie mit einem XSL und du hast deine grafische Präsentation. Ich denke, dass es ein paar XSL-Blätter zur Auswahl gibt, aber I think this one does the trick.

Normalerweise lasse ich CruiseControl.NET dies für mich tun, mit der Msbuild-Datei des Projekts in Frage.

+0

Gute Antwort, aber ich habe nur Zugriff auf die gesamte Logdatei im Klartext, nicht XML. – Sardaukar

+1

http://blogs.sqlxml.org/media/p/4881.aspx Fehler erhalten – Kiquenet

Verwandte Themen