Gibt es irgendein statisches Quellcode-Analyse-Tool, das dabei helfen kann, nicht erreichbaren/nicht verwendeten Code in C# -Programmen zu finden?Open-Source-Tool zum Ermitteln nicht erreichbaren/unbenutzten C# -Codes
Antwort
FxCop, das in höhere Editionen von Visual Studio integriert ist, warnt vor nicht verwendeten privaten oder internen Mitgliedern. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Codeanalyse ausführen". In Verbindung mit "nicht erreichbaren Codesegmenten", die vom Compiler identifiziert werden, wie andere bemerkt haben, sollte dies den verbleibenden unbenutzten Code erfassen. FxCop
(Note wird nicht warnen ungenutzter öffentlichen oder geschützten Mitglieder, da diese Teil einer API für die Verwendung durch externe Anrufer bestimmt sein könnte. Auch FxCop in allen Editionen von Visual Studio nicht verfügbar ist, obwohl ältere Versionen sind zum Download verfügbar.)
FxCop ist separat von VS erhältlich, soweit ich weiß (ich weiß, dass es separat erhältlich ist, es ist der freie Teil, über den ich mir nicht sicher bin). –
Ja, getrennt und frei. – Cheeso
Das beste, was ich vorschlagen kann, ist ein Code-Coverage-Tool auf der Haupt-Executable statt einer Test-Assembly, dann die Anwendung durch ihre Schritte ... Eine statische Analyse von Code wäre NP schwer in etwas esoterischer zu tun Fälle.
Es ist viel schlimmer als NP-HARD. Eine exakte statische Analyse der Codeabdeckung ist praktisch * per definitionem * das Halteproblem. Offensichtlich entspricht die Frage "Führt diese Codezeile jemals aus" zu "Hält dieses Programm jemals an?" (Ersetzen Sie einfach jeden Halt im Programm durch eine Endlosschleife, und die fragliche Zeile mit einem Halt, und führen Sie dann Ihren Haltedetektor aus.) Das Halteproblem ist sicherlich nicht NP-HARD; es ist unaussprechlich. –
@Eric: Ich habe kurz davor aufgehört, The Halting Problem zu erwähnen, denn obwohl es für mich richtig klingt, war ich nicht ganz sicher, ob es in diesem Fall anwendbar war. –
Obwohl kein Open-Source-Tool, können Sie R# (Resharper) verwenden. Es handelt sich um ein visuelles Studio-Add-In, das Ihnen nicht erreichbaren Code anzeigen kann und es automatisch entfernen kann (mithilfe der Systembereinigung).
Es ist aber nicht Open Source, oder? –
Ist es mindestens kostenlos (kostenlos) oder müssen Sie es kaufen? – hasen
Es ist nicht kostenlos, aber Sie können ihre Beta-Version kostenlos (zumindest für jetzt) verwenden - nächtliche Builds sind verfügbar unter: http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+5.0+Nightly+Builds –
Sie können das Code Coverage-Tool verwenden, das in Visual Studio 2005/2008 Team Suite verfügbar ist.
Das Tool NDepend kann helfen, ungenutzten Code in einer .NET-Codebasis zu finden. Dieses Tool ist jedoch nicht Open Source. Haftungsausschluss: Ich bin einer der Entwickler dieses Tools.
NDepend schlägt vor, Code Rule over LINQ Query (CQLinq) zu schreiben. Rund 200 default code rules vorgeschlagen werden, von denen 3 bis Erkennung nicht verwendeten/toter Code gewidmet werden:
- Potentially dead Types (also nicht verwendete Klasse erkennt, Struktur Schnittstelle, delegiert ...)
- Potentially dead Methods (daher erkennen, nicht verwendete Methode , ctor, Eigenschaft Getter/Setter ...)
- Potentially dead Fields
NDepend in Visual Studio integriert ist, so können diese Regeln checked/browsed/edited right inside the IDE sein. Das Tool kann auch in Ihren CI-Prozess integriert werden und es kann reports erstellen, das Regeln verletzt und Täter-Code-Elemente zeigt.
Wenn Sie diese 3 Links oben auf den Quellcode dieser Regeln klicken, werden Sie feststellen, dass die Typen und Methoden ein wenig komplex sind. Dies liegt daran, dass sie nicht nur unbenutzte Typen und Methoden, sondern auch Typen und Methoden, die durch nicht verwendete tote Typen und Methoden (rekursiv) verwendet wurden, nur nur erkennen.
Dies ist statische Analyse, damit das Präfix Potenziell in den Regelnamen. Wenn ein Codeelement nur durch Reflexion verwendet wird, können diese Regeln es als nicht verwendet betrachten, was nicht der Fall ist.
Zusätzlich zu diesen drei Regeln würde ich empfehlen, die Codeabdeckung durch Tests zu messen und eine vollständige Abdeckung anzustreben.Oft wird der Code, der nicht durch Tests abgedeckt werden kann, tatsächlich unbenutzt/tot Code, der sicher verworfen werden kann. Dies ist besonders nützlich bei komplexen Algorithmen, bei denen nicht klar ist, ob ein Codezweig erreichbar ist oder nicht.
- 1. 8086 Assembly: Ermitteln der Ausführungszeit des Codes?
- 2. C++ Ausnahmebehandlung in C-Codes
- 3. C# Optimieren des Codes
- 4. Ermitteln von nicht verwendeten Funktionen in C
- 5. Wrapping eines C++ Codes mit Objective-C++
- 6. Wie kann ich den Pfad zum C# -Compiler ermitteln?
- 7. Ermitteln der Vorlagenpräsenz zum Zeitpunkt der Kompilierung
- 8. Tool zum Ermitteln von XPath
- 9. SonarQube Java-Version zum Verifizieren des Codes
- 10. Leafletjs L.Control.Geocoder.nominatim(), Button zum Ausführen des Codes
- 11. ReSharper - Dokumentation zum gemeinsamen Teilen des Codes
- 12. Identifizierender Algorithmus zum Generieren von Codes
- 13. Verwendung der Vtable zum Ermitteln der Klassenart
- 14. Wie zeige ich solchen Text in c-Codes oder C++ - Codes?
- 15. C# MVC Ermitteln des erfolgreichen HTTP-Statuscodes
- 16. Werkzeuge zum Messen der empirischen Rechenkomplexität von Java-Codes?
- 17. Schaltfläche "Suchen" auf asp.net mit C# -Codes
- 18. Ermitteln des ausführbaren C-Namens
- 19. C#: Ermitteln einer fehlenden Abhängigkeit
- 20. C++ - Vorlage ermitteln Funktion Rückgabetyp
- 21. Dauer der Audiodatei ermitteln C#
- 22. Ermitteln, ob CodeElement zum Projekt gehört
- 23. Ermitteln, ob STDERR zum Terminal geht
- 24. Verwenden von PropertyInfo zum Ermitteln des Eigenschaftstyps
- 25. Compile C-Codes mit ANSI in Eclipse
- 26. Eigene Laufzeitanalyse Ihres Codes in C#
- 27. Testen eines reinen C-Codes auf Xcode?
- 28. Verwendung von LOC zum Ermitteln der Projektgröße
- 29. Node.js zum Abrufen/Ermitteln der Betriebssystemversion
- 30. Ermitteln echten Kompilierfehler in Visual Studio C++
Äh, Visual Studio gibt Warnungen über nicht erreichbaren oder nicht verwendeten Code ... – Joren
Nur nicht verwendete Segmente von Funktionen, und das wird vom Compiler behandelt, nicht VS. Ich habe das Gefühl, dass das OP von völlig unbenutzten/nicht aufgerufenen Funktionen spricht, die vom Compiler nicht behandelt werden. –
@ ApoY2k unerreichbar ja. Nehmen wir an, Sie deklarieren eine Methode, rufen sie aber nie auf. AFAIK wird nicht unterstützt. – ParmesanCodice