Visual Studioでゼロ参照コードのリストを取得する


133

Visual Studio 2013では、特別なコード(メソッド、プロパティ、フィールドなど)の参照数がCode Lensによって表示されます。Visual Studioで未使用の(ゼロ参照)コードを取得したい。それらを取得する方法はありますか?

以下の参照を意味します:

ここに画像の説明を入力してください


7
彼は、特定のメソッドの参照の数をゼロにするのではなく、参照されていないすべてのメソッドのリストを望んでいると思います。
Jurgen Camilleri 2015年

1
あなたがいる場合、未使用の参照を見つけたい、あなたは見つけることができますたくさんの重複した質問のを。「c#find unused code」を
ググってください

1
はい、未使用のすべてのコードにメソッド、プロパティなどが含まれているのを見つけたい
Nima Rostami

1
publicコードベース全体を検索しないと、a が未使用であることを確認できないことに注意してください。ただし、未使用の内部とプライベートの場合、適切な警告を有効にすると、コード分析で警告が表示されます。
マシューワトソン

2
数年後、スクリーンショットは誤解を招き続けています。
シンジャイ

回答:


184

おそらく、目的を達成するための最善かつ最も簡単な方法は、Visual Studioで組み込みのコード分析ツールを使用して、デッドコードと未使用のメンバーを直接見つけてそこに移動することです。

そのために、新しいコード分析ルールセットファイル([ファイル] - > [新規]-> [ファイル]を選択)を作成しました。左側のペインで[ 全般]が選択されていることを確認し、下にスクロールしてコード分​​析ルールセットを見つけ、ファイル名を指定して、以下のルールを選択します)。コピーして、使用する拡張子.rulesetを持つ新しいファイルに貼り付けることができるルールセットファイルの内容については、以下を参照してください。

ルールセットファイルを指定すると、ソリューションエクスプローラーパネルでプロジェクトファイルを右クリックし、[ プロパティ ]を選択できます。プロジェクトのプロパティウィンドウで、左側のパネルの[ コード分​​析 ]タブをクリックし、[ 開く ]をクリックして.rulesetファイルの場所を参照します。(プロジェクトファイルではなく)ソリューションファイルのプロパティに移動すると、ソリューション内の各プロジェクトのコード分析ファイルを1か所に設定できます([コード分析設定]の下で、ドロップダウンを使用して選択します)ルールセットファイル注:このプロパティウィンドウのドロップダウンに表示するには、事前にルールセットファイルを参照しておく必要があります。

そして、あなたは、単に(VIAプロジェクト/ソリューションにコード分析を実行Analyze->ファイル名を指定して実行コード解析についてソリューション -または- Altキー+ F11)、それは警告、任意の参照されていない方法や、見つかった未使用のメンバーとして戻ってくるだろう。それ自体が他のどこにも参照を持たないメソッドによって参照されるメソッドを見つけることもできます。

ただし、デッドコードのコード分析が誤解を招く可能性のある方法の1つとして、デリゲートを介してメソッドを呼び出すだけで参照が「非表示」になっている場合や、もちろんリフレクションがある場合は注意が必要です。

具体的には、デッドコードを検出するためのルールは次のとおりです。

  • 他のコードから呼び出されないプライベートメソッド(CA1811)
  • 未使用のローカル変数(CA1804)
  • 未使用のプライベートフィールド(CA1823)
  • 未使用のパラメーター(CA1801)
  • 他のコード(CA1812)からインスタンス化されない内部クラス。
  • ビットごとのOR制限スイッチのデッドコード(C6259)

以下は、あなたの確信のために、上記のステップに従うことで持つことができる.rulesetファイルの内容です。以下のXMLをコピーし、notepad ++に貼り付け、拡張子.rulesetを付けてどこかに保存し、前述のように参照して使用できます。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Dead Code Rules" Description=" " ToolsVersion="12.0">
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1801" Action="Warning" />
    <Rule Id="CA1804" Action="Warning" />
    <Rule Id="CA1811" Action="Warning" />
    <Rule Id="CA1812" Action="Warning" />
    <Rule Id="CA1823" Action="Warning" />
  </Rules>
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6259" Action="Warning" />
  </Rules>
</RuleSet>

30
これが質問に完全に答えるとは思いません。主な違いは、CodeLensはPUBLICメソッドにはソリューション全体で参照がないことを通知します。これが鍵です。FxCop、R#、およびあなたのメソッドは、パブリックでないものに最適です
スコットワイリー

1
@ScottWylie-同意しません。私は上記の解決策を試したところ、参照されていないパブリックメソッドにフラグが付けられませんでした。CodeLensは、デッドコード、参照されていないローカルなもの、および未使用の変数にフラグを立てる点で例外的でした。これにより、ほとんどの人がサードパーティのツールを使用せずに欲しいものを正確に入手できると思います。
マイク、2017年

7
@mikeこれを考慮してください:大量の操作でデッドコードを見つけたい場合、ローカル/プライベートメンバーはプライベートな問題や保護されたメンバーを気にしません。たとえば、100以上のプロジェクトと10以上のソリューションを含む500k以上のLoCプロジェクトをリポジトリパターンアーキテクチャに移行しています。コンポーネントを移行した後、どの古いインターフェースを削除できるかを知る必要があります。Eclipseなどの一部のIDEには、まさにそのためのツールがあります。グレー表示されたローカルメソッドは単に私の関心事ではありません。コードlensが「0」を通知するPUBLICクラス/インターフェースのリストが欲しいのですが。
Oliver Schimmer

0

https://scottlilly.com/c-code-quality-improvement/remove-unused-classes-properties-and-functions/

「残念ながら、[Visual Studio Analysis]では、未使用のプライベートメンバーしか検出できません。これは、コードアナライザーがパブリックメンバーが他のプログラムで使用されていると想定しているためです。Webサービスを介してAPIとして公開している場合は、これが当てはまる可能性があります。または、コードをライブラリとしてリリースします。ReSharperには同様のコード分析機能があり、未使用のパブリックメンバーをチェックできるという利点があります。」


0

各ファイルを調べ、Ctrl-MOコマンドを実行してすべてを折りたたみ、スクロールして参照0を探します。


-1

これは、パブリックとしてマークされている未使用のクラスを見つけるために使用した、手動での方法です。

  1. ソリューション内の1つのプロジェクトについて、すべての「パブリッククラス」を「プライベートクラス」で検索して置き換えます。「パブリック静的クラス」や「パブリック抽象クラス」を置き換える必要がある場合もあります。
  2. すべてのエラーを見つけるためのビルド
  3. ビルドのエラーごとに、ソース管理を使用して、参照されているクラスのファイルを復元します。
  4. ビルドが成功するまで、すべてのエラーに対して繰り返します。
  5. 復元されていない残りのファイルは、おそらく削除の候補です。
  6. (オプション)上記のファイルでクラスの名前を変更し、エラーを見つけるためにもう1つビルドを行います。
  7. 最後に、削除するクラスの名前を検索して、リフレクションまたはマジックストリングで使用されているクラスのインスタンスがないことを確認します。
  8. 識別された未使用のクラスファイルを削除します。
  9. クリーンアップするソリューションプロジェクトごとに繰り返します。

注:ファイルごとに1つのクラスのルールに従わない場合は、さらに多くの作業が必要になります。また、外部プロジェクトで使用されていないことを確認する必要があるすべてのAPIサービスエンドポイント。


14
これはまったく実用的ではありません。
Don Rolling

1
それは私にとって大規模なプロジェクトで機能し、1つの解決策です。場合によっては難しい場合もありますが、可能性としてこれを提供したいと思いました。
Ulfius
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.