web-dev-qa-db-ja.com

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

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

私は参照以下を意味します:

enter image description here

101
Nima Rostami

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

このために、新しいコード分析ルールセットファイルを作成しました(Via File-> New-> File、左ペインでGeneralが選択されていることを確認し、下にスクロールします) find コード分析ルールセット、ファイル名を指定してから、以下のルールを検索して選択します)。ルールセットファイルの内容については、コピーして、使用する拡張子が.rulesetの新しいファイルに貼り付けてください。

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

次に、プロジェクト/ソリューションでコード分析を実行するだけで(Via Analyze-> Run Code Analysis On Solution -OR- 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>

これがお役に立てば幸いです。ベストアンサーを選択することを忘れないでください。

139
Adam White

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

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

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

2
Ulfius