Hallo,
ich möchte innerhalb einer Solution alle Methoden ermitteln, die aus keinem der enthaltenen Projekte aufgerufen werden.
Natürlich kann ich Methode für Methode durchklicken und ein "Find all References" oder ein "Find Usages" (R#) machen - nur würde ich das gerne automatisieren.
Ich bin bereits auf NDepend gestoßen, was das kann, aber NDepend finde ich jedes Mal, wenn ich es mir angucke, mehr als umständlich 😦
Kennt jemand eine einfache, leichtgewichtige Alternative?
Viele Grüße,
Golo
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Hallo Golo,
mit R# 4.5 kannst du per Solution-Wide Analysis 'Unused public methods' anzeigen lassen.
Dazu einfach nur unten rechts den grauen Kreis doppelklicken.
Die Namen der nicht genutzten Methoden werden dann wie bei unused private methods grau dargestellt.
Edit: Für eine Auflistung aller nicht genutzten Methoden wirst du auf R#5 warten müssen. Die Entwickler meinten das sie das implementieren möchten. (Keinesfalls offiziell angekündigt 😃)
Gruß,
Tom
Insbesondere, wenn man Reflection verwendet (bzw. manche Member ausschließlich damit aufruft), sollte man aber aufpassen - daran scheitert verständlicherweise auch der ReSharper.
Hallo Golo,
du könntest jede Methode mit einem Breakpoint versehen und während des Debuggens beim Erreichen eines Breaktpoints diesen entfernen dann bleiben jene Methode über welche nie erreicht werden 😁
Ernsthafterer Vorschlag:
Im Zuge der Verwendung von PEX hab ich sowas mal auch gemacht. Jene Methode welche dort keine Coverage haben werden nicht benötigt. Im Zweifel kann dies durch auskommentieren und kompilieren bestätigt werden.
Sollte es sich um eine Art Framework o.ä. handeln ist damit aber vorsicht geboten. Aber das ist dir eh klar 😉
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Das könntest Du mind. auf 3 verschiedene Arten machen:
1.) Benutze Gendarme und erstelle eine entsprechende Regel die Dir das anzeigt.
2.) Benutze FxCop von Microsoft und mache damit genau dasselbe.
3.) Benutze NDepends (Trial Version) die kann Dir das anzeigen was nicht benutzt wird und schon hast Du die Sachen gefunden.
3.) ist imho momentan die einfachste und schnellste Methode die ich kenne, da Du ja bei 1.) und 2.) die Regeln brauchen würdest.
EDIT: Upps hab jetzt gerade erst gelesen, dass Du NDepend ja schon entdeckt hattest...
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
aber auch beim zusammenspiel mit wpf ist vorsicht geboten
wenn zb eine methode ueber n command von einer ui aus aufgerufen wird, gibt es (womoeglich) keinen direkten caller der methode
dann kann es sein das es gekillt bzw als unused markiert wird obwohl gebraucht
Hallo zusammen,
ich habe mal versucht, eine entsprechende Regel für FxCop zu schreiben - ist prinzipiell nicht schwer, und ein paar Sonderfälle (Main-Methode zB, Typinitialisierer, ...) lassen sich schnell herausfiltern.
Funktioniert so weit wunderbar.
Das Blöde ist: Alle Methoden, die zB direkt aus dem Framework (zum Beispiel von ASP.NET) aufgerufen werden, haben "angeblich" auch keinen Caller ...
Wie könnte man ermitteln, ob eine Methode irgendwie aus dem Framework aufgerufen wird?
Viele Grüße,
Golo
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Kann man in einer FxCop-Regel prüfen, ob ein Member eine Interfaceimplementierung eines Interfaces aus der FCL ist?
Dann hätte man schonmal ein paar Fälle aussortiert.
Ja, das kann man prüfen ... die Frage wäre halt nur, welche Interfaces man da aufnehmen sollte.
Spontan fällt mir erst mal nur IDisposable ein.
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
@Golo Roden
kennst du ein gutes Turorial um mal eine FxCop regel selber zu schreiben? bzw. kannst du die regel die du für das nicht aufrufen der Methoden definieriert hast hier veröffentlichen?
Again what learned...
Salute rollerfreak2
Den Link hab ich grad von Golo bekommen:
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
die Frage wäre halt nur, welche Interfaces man da aufnehmen sollte
Alle öffentlichen?
Also irgendwie per Reflection beziehen.
Salute Peter und Golo,
und besten Dank
Again what learned...
Hallo ich bins noch mal. ICh hab ein kleines Problem bezüglich dem was golo vor hatte. Ich hab mir mal eine Regel geschrieben die mir alle Methoden anzeigt welche keinen "caller" haben. In der public override ProblemCollection Check(Member member) check ich ob dort eine methode als member übergeben wird. Wenn ja wie kann ich jetzt prüfen ob im gesamten Code diese Methode nun gecalled wird oder nicht?
Again what learned...