未使用の参照を削除(!=“ using”)


100

プロジェクトで未使用の参照を見つけて削除するにはどうすればよいですか?

vs 2008ではusingステートメントを簡単に削除できますが、プロジェクトの実際の参照は削除されません。参照されたdllは引き続きbin / setupパッケージにコピーされます。


ありがとう。悲しいことに、私が探していた答えはありませんでした...
ボリス・カレンス

回答:


55

*注:この回答の別のバージョンについては、http//www.jetbrains.net/devnet/message/5244658を参照してください

投稿を読んでみると、元の質問に関していくつかの混乱があるようです。それを刺してみましょう。

元の投稿は本当に質問をしています:「あるVisual Studioプロジェクトから、使用されていない他のプロジェクト/アセンブリへの参照を特定して削除するにはどうすればよいですか?」投稿者は、アセンブリがビルド出力の一部として表示されないようにしたいと考えています。

この場合、ReSharperはそれらを識別するのに役立ちますが、自分で削除する必要があります。

これを行うには、ソリューションブラウザの参照を開き、参照されている各アセンブリを右クリックして、[依存コードを検索]を選択します。見る:

http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code

次のいずれかを取得します。

  1. ブラウザウィンドウでのその参照への依存関係のリスト、または

  2. 「モジュールXXXXXXXに依存するコードが見つかりませんでした」というダイアログ。

2番目の結果が得られたら、参照を右クリックして[削除]を選択し、プロジェクトから削除できます。

これを「手動で」、つまり一度に1つの参照で行う必要がありますが、作業は完了します。誰かがこれを何らかの方法で自動化した場合、それがどのように行われたかを聞くことに興味があります。

.Net Frameworkのものは、通常はビルド出力にコピーされないため、ほとんど無視できます(通常、Silverlightアプリには必ずしも当てはまりませんが)。

一部の投稿は、「ファイル内の参照を解決するために必要ではないソースコードファイルからusing句(C#)を削除するにはどうすればよいですか」という質問に答えているようです。

この場合、ReSharperはいくつかの方法で役立ちます。

  1. オンザフライのエラー検出中に未使用のusing句を識別します。それらはコードインスペクション警告として表示されます-コードはファイル内で灰色で表示され(デフォルト)、ReSharperはそれを削除するためのヒントを提供します。

    http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection

  2. コードのクリーンアッププロセスの一環として、これらを自動的に削除できます。

    http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

最後に、ReSharperがソリューションで静的コード分析を行うことを理解してください。したがって、アセンブリへの動的参照がある場合(リフレクションや、実行時に動的に読み込まれ、インターフェイスを介してアクセスされるアセンブリなど)は、ピックアップされません。 プロジェクトで作業するときに、コードベースとプロジェクトの依存関係を理解するための代替手段はありません。ReSharperの機能は非常に便利だと思います。


素晴らしい答え。奇妙なのは、私がusingステートメントに言及していないことはご存じですが(クリーンアップはVSでは標準ですが、R#が再発明した理由を理解しないでください)、最初にその質問に答えます。2つを入れ替えていただけませんか。
Boris Callens

しましょう。ReSharperの機能は、Visual Studioの実装に先行しています。「オートコレクト」機能によって達成されたままです。ReSharperがあると、スマートタグはオフになります。
jlo 2009

1
現在、約4年後のReSharper 6.1に直接機能が追加されました。
ジュリアンロンカリア

意味がわからない-ReSharperには何年もこの機能がありました。
jlo

8
注意してください:何らかのリフレクションを使用してアセンブリから動的にロードする場合、これは悪いことです。「参照」を使用してアセンブリをビン/製造サイトに運ぶことになりますが、それを直接参照するコードはありません。注意して使用してください!
キャスパーレオンニールセン




4

ReSharper 6.1には次の機能が含まれます。

  • 参照の最適化:コードでのアセンブリ参照とその使用法を分析し、冗長な参照のリストを取得して削除します。

  • 未使用の参照の削除:冗長なアセンブリ参照を削除するための迅速なリファクタリング。

  • アセンブリ参照の安全な削除:アセンブリ参照がすべて重複している場合はアセンブリ参照を削除します。そうでない場合は使用状況を表示し、選択したリストの冗長なアセンブリ参照のみを削除できます。


4

ReSharperがあなたに代わってこれを行います(そして、もっとたくさん!)


Resharperは実際にReferencesフォルダー内のDLLへの参照を削除しますか?これはできないと思いますか?
tobinharris 2009年

1
私はそうは思わない...それはあなたが参照していない名前空間のusingステートメントをヤンクするだけだと思う​​。FWIW-Coderushは同じ機能を提供します。:)
サムライケン

1
現在、約4年後のReSharper 6.1に機能が追加されました。
ジュリアンロンカリア

3

私はこれをVS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assemblyで拡張なしで実行しました。使用されたアセンブリが表示され、未使用の参照が手動で削除されました。


大規模なプロジェクトにはこれをお勧めしません。何が使われ、何が使われなかったかを見分けるのは非常に困難でした。しかし、私はたまたま色覚異常でもあるので、これが私にとっての有用性に影響を与えた可能性があります。
DubiousPusher 2015年

2

Visual StudioのすべてのバージョンとFrameworkのすべてのバージョンで機能する無料の回答があります。未使用の参照は削除されませんが、それらを識別します。

プロジェクトdllでTelerik JustDecompileを使用できます。JustDecompileでDLLを開き、ReferencesコンパイルされたDLLで実際に使用されているものを確認します。

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


1
それは素晴らしい解決策だと思います!VSプラグインを作成しますか?:) ILSpyにはプラグインがあり、簡単に半自動化できるかどうかを確認します...
Steven Coco

@StevenCoco久しぶりですが、IDE APIは非常に単純明快で、インターネット上に多くの優れた例があります。がんばって、プロジェクトが完了したらアップデートしてください!
toddmo

0

VisualStudio(またはmsbuild?)が未使用の参照を検出し、それらを出力ファイルに含めない場合、csprojからの参照を解析し、それを、プロジェクトの出力。

やる気があるなら...


1
これは常に正しいとは限りません。たとえば、Barから派生するクラスFooがあり、Barに静的メンバーBlahがあり、それをFoo.Blahとして呼び出す場合、コンパイラーの参照にFooのアセンブリが必要ですが、発行されません静的メンバーがバーにあるため、出力に。このようなケースがさらにいくつかあります。
Ilya Ryzhenkov

ええ、私は自分のスクリプトにいくつかの「穴」があることに気づきましたが、その理由を理解するために回ることはありませんでした。情報をありがとう。
Benjol 2009

0

bin \にコピーされていると思います。参照を削除したプロジェクトでは、同じ参照を持つ他のプロジェクトへの参照があるためです...


0

使用されていない参照がわかっている場合は、手動で削除できます。
ソリューションエクスプローラで、参照を右クリックし参照のノードを、[削除]をクリックします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.