2009-07-08 8 views
2

Ich schrieb vor kurzem eine post here on Stackoverflow fragt nach einigen C# -Bibliotheken, die Metriken berechnen, hauptsächlich CC ... leider ohne Erfolg. Also werde ich es selbst schreiben. Ich habe im Internet nach dem besten Ansatz gesucht, aber bevor ich anfange, möchte ich Sie fragen, wie Sie das machen würden.Code-Struktur mit CodeDom analysieren?

Ich bin zur Zeit zwischen zwei Arten von

nähert sie
  • ein Quellcode-Verzeichnis angegeben, den Quellcode mit Regex Ausdrücke oder ähnlichen für die Identifizierung der Konstrukte wie Methoden, bedingte Anweisungen usw. analysieren für in der Lage, berechnen CC
  • eine Baugruppe, laden sie und ihre Analyse (mit CodeDom?)

ich bin mehr für den zweiten Ansatz, da das Parsen des Quellcodes direkt scheint nicht ein guter Ansatz zu sein, um Gegeben mich. Ich habe über CodeDom gelesen, das in das .Net-Framework integriert ist. Ich weiß, dass es für die dynamische Code-Generierung verwendet wird. Ich denke, ich könnte es auch für die Analyse der Code-Struktur verwenden, oder? Hat jemand von euch einen guten Ausgangspunkt, um CodeDom, einige Hinweise, gute Tutorials zu verwenden, wo man anfangen kann?

Dank

Edit: Oder vielleicht ein anderes Programm, das leicht Quellcode zu analysieren erlaubt (DOM ähnliche Struktur).

+0

Ich glaube nicht, dass Sie ein CodeDOM-Diagramm von einer bereits kompilierten Baugruppe laden können ... – driis

+0

und aus Quellcode? Wird das möglich sein? – Juri

+0

Die API ist da, aber weder C# noch VB CodeDom Provider implementieren den Teil von Source-to-Graph. Sie tun nur Graph-zu-Quelle. –

Antwort

0

Das Problem mit CodeDom ist, dass es eine Möglichkeit ist - es gibt APIs zum Generieren von Code, aber keine zum Parsen von Code. Ich erinnere mich, dass ich von einigen nicht unterstützten/versteckten APIs gehört habe, die Code in CodeDom-Strukturen parsen, aber ich bin mir nicht sicher.

Auch, wie würden Sie den Code von der Baugruppe selbst erhalten? Die Reflexion geht nicht auf die IL, sondern nur auf die Mitglieder der Klassen.

+0

Ich kann Reflection nicht verwenden, Sie haben Recht. Aber ist es nicht möglich, einen als String dargestellten Code in CodeDom zu laden und dann die CodeDom-Struktur zu durchlaufen? Dieses Tool scheint einen solchen Ansatz zu verwenden: http://www.anticipatingminds.com/Content/Products/devMetrics/devMetricsSharedCode.aspx – Juri

+0

Ich habe lange nicht in CodeDom gesucht, aber es gab keine Parser bei der Zeit. Sind Sie sicher, dass devMetrics von Assemblys und nicht vom Code selbst funktioniert? – Andy

0

Werfen Sie einen Blick auf this CodeProject article. Es scheint der Anfang von dem zu sein, was Sie versuchen zu tun, aber würden einige Ergänzungen benötigen; Da der Beispielcode im Artikel keine Member analysiert, nur Typen und Namespaces.

Es gibt keine vollständigen Parser für CodeDOM, die ich kenne, die auch on the BCL Team Blog erwähnt wird.

3

macht einige Code-Metriken (Art von) mit Hilfe von Mono.Cecil, vielleicht würde es mit was Sie versuchen zu erreichen helfen?

0

Siehe C# Metrics tool, die CC und eine Vielzahl anderer Metriken berechnet.

+0

thx, ich werde es mir ansehen – Juri

0

Da Sie mit .NET sind besorgt haben einen Blick auf mit .Net Reflector

Es gibt eine Vielzahl von Plugins von denen einige grundlegende Metriken einschließlich CC berechnet.

Wenn Sie nicht finden, was Sie suchen, warum nicht Ihre eigenen schreiben. .NET Reflektor hat eine plugin API bietet eine Art von CodeDom-Modell, das Sie leicht analysieren können (siehe auch unten page)