foo() がどこからも呼び出されていない場合は、 foo() を削除したい。
7 に答える
Gendarmeは、上流の呼び出し元を持たないプライベート メソッドを検出します。クロス プラットフォームで利用でき、最新バージョンは " AvoidUncalledPrivateCodeRule " を処理します。
FxCopは、上流の呼び出し元を持たない public/protected メソッドを検出します。ただし、FxCop は上流の呼び出し元のないすべてのメソッドを検出するわけではありません。これは、コードがライブラリの一部であるかどうかをチェックするためのものであるため、パブリック メンバーは除外されます。NDepend を使用して、アップストリームの呼び出し元のないパブリック メンバーを検索できます。これについては、この他の StackOverflow answer で詳しく説明します。
(編集:質問者が尋ねたことを実際に行うGendarmeに関する情報を追加)
NDependは未使用の可能性があるコードについても報告します。
メソッドがマークされている場合、Resharper(およびおそらく他の同様のツール)は未使用のメソッドを強調表示しないことに注意してくださいpublic
。静的コード分析ツールが、アセンブリのメソッドがソリューション外の他のアセンブリによって使用されているかどうかを確認する方法はありません。したがって、未使用のメソッドを取り除く最初のステップは、private
またはへの可視性を減らすことinternal
です。
メソッドだけでなく、 Resharperがこれを行います。また、ステートメント、変数などを使用してそれを行います。
はい、MZ-Toolsアドインにはデッド コードのレビュー機能があります。
ツールNDependは、.NET コード ベースで未使用のコードを見つけるのに役立ちます。免責事項: 私はこのツールの開発者の 1 人です。
NDepend は、LINQ Query (CQLinq) で Code Ruleを作成することを提案しています。約200 の既定のコード規則が提案されており、そのうちの 3 つは未使用/デッド コードの検出専用です。
- 死んだ可能性のある型(したがって、未使用のクラス、構造体、インターフェイス、デリゲートを検出します...)
- 死んだ可能性のあるメソッド
- 死んだ可能性のあるフィールド
NDepend は Visual Studio に統合されているため、これらのルールは IDE 内で直接チェック/参照/編集できます。このツールは CI プロセスに統合することもでき、違反したルールやコード要素の原因を示すレポートを作成できます。
これらの 3 つのリンクをクリックしてこれらのルールのソース コードに移動すると、型とメソッドに関するものが少し複雑であることがわかります。これは、未使用の型とメソッドだけでなく、未使用のデッド型とメソッド (再帰的) によってのみ使用される型とメソッドも検出するためです。
これはstatic analysisであるため、ルール名に接頭辞Potentiallyが含まれています。コード要素がリフレクションによってのみ使用される場合、これらのルールはそれを未使用と見なす可能性がありますが、そうではありません。
これら 3 つのルールを使用することに加えて、テストによってコード カバレッジを測定し、完全なカバレッジを達成するよう努めることをお勧めします。多くの場合、テストでカバーできないコードは、実際には安全に破棄できる未使用/デッドコードであることがわかります。これは、コードの分岐が到達可能かどうかが明確でない複雑なアルゴリズムで特に役立ちます。
VS がこれをネイティブに実行しない場合、簡単な方法は、メソッドを右クリックして [すべての参照を検索] を選択することです。参照が 1 つしかない場合 (宣言されている場所)、他の場所では使用されていない可能性が高くなります。