Visual Studioプロジェクトのプロジェクトから未使用の参照をすべて削除する


263

Visual Studioのさまざまなバージョンで、使用されなかったすべての参照をプロジェクトから自動的に削除できるかどうか疑問に思いました。

回答では、ソリューションが適用されるVSのバージョンを指定してください。


4
一般に、これらのDLLを削除すると、ビルド時間などが目に見えて改善されるのでしょうか。(もちろん、冗長な依存関係を削除する以外)
monish001

3
VS2015に同様の無料の拡張機能はありますか?
George Birbilis、2015年

1
VB.NetプロジェクトはVS 2005以降にそれを持っていますが、C#プロジェクトには実装されていませんmsdn.microsoft.com/en-us/library/7sfxafba
Slai

4
この機能をVSの一部として含めるように投票することができます(必要に応じて)。
Mike Lowery 2017

2
@ monish001-すべてのアセンブリとアセットは、展開のフットプリントを増やし、バグを管理/維持する、または潜在的な原因となるもう1つの要素です。
StingyJack 2018

回答:


55

Resharper(プラグイン)がインストールされている場合は、ソリューションエクスプローラー>(右クリック)参照>参照の最適化...で使用されている参照を分析できる機能にアクセスできます

http://www.jetbrains.com/resharper/webhelp/Refactorings__Remove_Unused_References.html

この機能は正しく処理しません:

  • 依存性注入アセンブリ
  • 動的に読み込まれたアセンブリ(Assembly.LoadFile)
  • 相互運用機能を介して読み込まれたネイティブコードアセンブリ
  • ActiveXコントロール(COM相互運用)
  • アセンブリをロードするその他の創造的な方法

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


1
最後のステートメント「完璧ではありませんが、現在のプロジェクトで参照されているアセンブリに依存しているアセンブリは未使用としてマークされています。」実際には問題ありません。ビルドは、参照の参照をコピーすることを認識しています。この回答を参照してください:stackoverflow.com/a/2290139/26262
Ed Greaves

これは、これを実行するための実行可能な方法ですが、「さまざまなVisual Studioバージョン内」は、他のことではなく、すでに「内」であることを意味します
マークシュルタイス

28

ReSharperの拡張機能はあなたのためにこれを行います。

この拡張機能は、Visual Studio 2005〜2017をサポートします。

コンパイラーは未使用のアセンブリーを含めませんが、無関係なusingステートメントと参照により、Visual StudioとIntellisenseの速度が低下します。


12
アウトプロジェクトで多くの未使用の参照が見つかりましたが、実際に使用されているそれらの束...したがって、Resharperを参照で信頼していません
Offler

5
VSを最終的にクラッシュさせる多くの参照がある場合、Resharperは大きなプロジェクトで大量のメモリを消費します
Cemre

2
@eraj VS Expressエディションは拡張機能をサポートしていません。ReSharperなどの拡張機能をサポートする無料のCommunityエディションを入手してください。
codemonkeh 2015年

4
ピート、自動化されたツールはすべて、行き過ぎる可能性があります。特にDIとPCLの時代には、unsundesされていないように見える依存関係が必要になるかもしれませんが、それはほとんどツールのせいではありません。スクリーンショットを作成するのではなく、バージョン管理ソフトウェアを使用する必要があります。GitやHgのような最新のシステムでは、ローカルで頻繁にチェックインできるため、作業を失うことはありません。
Mathieson 2015

2
Resharperがアセンブリの参照ではなく未使用の名前空間を表示していることを私が知る限り、「プロジェクトからの未使用の参照」という質問が意味すると私は思います。後者も見つけたいのですが
Sonic Soul

28

Larditeグループによる無料のVS2010拡張機能:Reference Assistantを試すことができます。それは私にとって完璧に機能します。このツールは、未使用の参照を見つけるのに役立ち、削除する参照を選択できます。


3
MVCプロジェクトでは機能しません。.Helpersおよび.WebPageとして不可欠なDLLを削除します
User.Anonymous


働くことをあなたは、単純なトリック続く場合:devio.wordpress.com/2014/12/03/...
ラヴィpunjwani

5
そしてVS2019のために?
DARKGuy

21

Visual Basicプロジェクトでは、「未使用の参照」を削除するサポートがあります(プロジェクト->参照->未使用の参照)。C#にはそのような関数はありません。

C#プロジェクト(他のツールなし)でこれを行う唯一の方法は、使用されていない可能性のあるアセンブリを削除し、プロジェクトをコンパイルして、コンパイル中にエラーが発生するかどうかを確認することです。エラーが発生しない場合は、未使用のアセンブリを削除しています。(私の投稿を参照

どのプロジェクト(アセンブリ)が他のアセンブリに依存しているかを知りたい場合は、NDependを使用できます。


2
VS 2008/2010には、右クリックメニューオプションがあり、削除したり、削除したり、使用法をソートしたりできます。
JohnB 2010

11
@JohnB:もちろんあなたは正しいですが、彼の質問は(名前空間の)使用ではなく(アセンブリへの)参照についてです。
Jehof

VS2012:メニュー:プロジェクト->プロパティ->参照->未使用の参照。
LosManos

20

Visual Studio 2013/2015/2017の場合、希望どおりに機能する拡張機能ResolveURがあります。これが基本的に行うことは:

  • 参照はプロジェクトから削除されます
  • プロジェクトはmsbuildでコンパイルされています
  • ビルドエラーをチェックする
  • ビルドエラーがあった場合、削除された参照を復元します。

VS 2017 Community Edtにインストールしました。-これまでのところ正常に動作します。
トーマス

ビルドエラーがあると表示されますが、ビルド時にビルドエラーがないため、機能しませんvs2015 comm edtion
Raghavendra

githubのページで課題を作成できます:github.com/subatta/ResolveUR/issues
Claudiu Constantin

5
52件のレビューによるVisual Studio Marketplaceの5つ星のうちの2.5つはput me off a bit
ECH

MVCプロジェクトで試してみましたが、System.Web.Helpersのようないくつかの重要な依存関係を削除することを提案しているので、そのままにしておくことに消極的です。
Jahaziel

19

必要なのは石と裸のナックルだけで、穴居人のようにそれを行うことができます。

  1. (クラスごとに)未使用の名前空間を削除する
  2. デバッグビルドを実行する
  3. 実行可能ファイルと残りのネームスペース参照を新しい場所にコピーします
  4. 実行可能ファイルを実行します
  5. 不足している参照DLLエラーが発生します
  6. 必要なDLLをデバッグフォルダーからコピーする
  7. 4-6を繰り返す
  8. ググガガ?
  9. 石を投げる

ビルドツールを使用して、どの参照がまだ必要かを通知することもできます。それはVS 2017の時代であり、穴居人はまだ生き残っています。


ははは、まあ、ここのちょっとしたユーモアで何も悪いことではありません。実際、Stonemanのアプローチは、経費のかかるEnterpriseエディションなしでは、私たちが現在手に入れているもののように見えます。
ニコラスピーターセン

16

ここに来てVisual Studio 2012を探している人:

Visual Studio 11のリファレンスアシスタントをダウンロードしてインストールする

後で行うことができます:

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


1
Visual Studio 11のリファレンスアシスタントは不正確なようです。実際に使用されている(Nugetを介してインストールされている)ことがわかっている未使用のリファレンスがたくさん表示されました。
Bill Yang、

1
MVCプロジェクトでは機能しません。.Helpersおよび.WebPageとして不可欠なDLLを削除します
User.Anonymous

ええ、これはWPF C#プログラムを使用してお尻に噛み付くために戻ってきました。
Charles Clayton

VS2017のオプションではありません
Nathan

1
VS2019にも存在しない
Vin Shahrdar

15

Visual Studioバージョン2017および2015では、コードマップ機能を使用してこれを行うことができますが、この機能はEnterprise Editionでのみ使用でき、CommunityまたはProfessionalバージョンでは使用できません。

ソリューションエクスプローラーでプロジェクトノードを右クリックし、[コードマップに表示]を選択します。これにより、.dllが単一のノードとして空白のグラフに表示されます。コードマップでそのノードを右クリックし、[ アセンブリの参照を表示]を選択します。これにより、「外部」と呼ばれる追加のノードが追加され、実際に参照されているアセンブリのみを表示するように展開できます。

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


1
Enterpriseエディションを使用していて、コンテキストメニューにこのオプションが表示されない場合は、VSインストーラーの[個別コンポーネント]パネルにある「コードマップ」機能をインストールする必要があります。
StingyJack

これはいいものです、ありがとう@Glenn。Micosoft.Office.Interop.Excelを使用していて、他のリファレンスには記載されていないため、少し注意する必要があります。
Emil Filip

14

Visual Studio 2013では、この拡張は機能します: ResolveUR


15
@abarisone一般的な「回答としてリンクを使用しないでください」という応答は、実際に回答を調べた後でのみ使用する必要があります。リンクは、この回答に関連する唯一のものです。これはVSプラグインへのリンクなので、他に含める必要のあるものはありません。
Charles Boyung

私はチャールズに同意します。これは@abarisoneからの節度ある虐待のようです。この答えは本当に時間を節約するのに役立ちました、そしてもし誰かがそれを削除するために彼らの力を乱用したならば、私はそれを嫌っていたでしょう。
Zun

@Zunまず第一に、私はモデレーターになったことも、主張したこともありません。私の意図は、拡張機能に関する詳細情報を求めることでした。それは私の側では表面的だったかもしれませんが、私は確かに虐待を犯すつもりはありませんでした。
アバリゾン

12

一部の人々は、素晴らしいツール-Visual Studioのリファレンスアシスタントの使用を提案しました。問題は、VS2012がサポートされている最新のVisual Studioであることです。しかし、それをVS2013でも機能させる方法があります;)

そしてここに方法があります:

1)Lardite.RefAssistant.11.0.vsixをダウンロードします

2)拡張子をzipに変更します。- Lardite.RefAssistant.11.0.vsix>Lardite.RefAssistant.11.0.zip

3)extension.vsixmanifestテキストエディターでファイルを解凍して開きます

4)のすべての出現箇所を見つけてInstallationTarget Version="[11.0,12.0)"置換しますInstallationTarget Version="[11.0,12.0]"(閉じ括弧に注意)

5)ファイルを保存し、すべてのファイルを圧縮して、ルートzipレベルにします

6)の拡張子をに変更zipしますvsix

7)インストールしてお楽しみください:)

私はVS2013でそれをテストしました、チュートリアルのおかげでソース

編集 VS 2015 Community Editionをサポートに追加

<InstallationTarget Version="[14.0,15.0]" Id="Microsoft.VisualStudio.Community" />

括弧の意味

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

1
これはうまくいきます!作成者が数年前に修正した可能性のある単純なタイプミスのようですが、彼は消えたようです、少なくともウェブサイトは...
wexman

これはタイプミスではありませんが、サポートされている最高のVSバージョンです:)。開発者は、新しいVSバージョンごとにアドオンをテストして番号を増やすことになっていますが、何らかの理由でそうしませんでした。
VladL 2015年

「コピーと貼り付け」をやめることを忘れないでください。:)
Rikki

@RikkiRockett私宛てですか?私は回答にソースをリンクしました。または正確にはどういう意味ですか?
VladL 2015

2
いや、男。冗談でした。「]」ではなく「)」を付けた人に言っただけで、私たち全員があなたの指示を通り抜けました。:)いい仕事ですが、あなたが言ったことをすべてやりました。あなたは私とこれとの闘いの日を私に救いました。(y)
リッキ

7

Visual Studio拡張機能ギャラリーからReference Assistant拡張機能を使用できます。

使用され、Visual Studio 2010で動作します。


2
Webプロジェクトには注意が必要です。「未使用」として使用されているDLLを報告します。
Miro J.

私はミロに同意します。私はこれを自分のWebプロジェクトで使用しようとしましたが、Webアプリケーション(System.Web。*、Ninject。*、EntityFrameworkなど)を実行するために必要な20の参照を選択しました。
Denis M. Kitchen

MVCプロジェクトでは機能しません。.Helpersおよび.WebPageとして不可欠なDLLを削除します
User.Anonymous

1

DevExpressを使用して、次の手順に従います。

  1. VSで、DevExpress-Editor-Code Cleanupに移動します。[ルール]で、[未使用のネームスペース参照を削除する]をオンにします。OKをクリックします。
  2. ソリューションを右クリックし、[コードのクリーンアップ]を選択します。クリーンアップは数分間実行され、終了します。
  3. アプリケーションを構築する


-3

次の方法は、「アドオン」に依存せず、それほど苦痛ではありません。

各ソースファイルをステップ実行し、

  1. すべて選択(Ctrl-A)
  2. アウトラインの展開を切り替えます(Ctrl-M、M)。これにより、ファイルが2行に削減されます。
  3. 名前空間の「+」をクリックします。これにより、ファイルの各クラスが1行で表示されます。各クラスの参照カウントをスキャンして、参照されていないクラスを探します。
  4. 各クラスの「+」をクリックします。これにより、各クラス関数が1行で表示されます。各関数の参照カウントをスキャンして、参照されていない関数を探します。

「0リファレンス」を探すために各ファイルをスキャンするのに必要な時間はわずか1秒です。

プロジェクト全体のスキャンには、数分しかかかりません。


-11

VB2008では、次のように機能します。

Project>Add References

次に、最近使用した参照のリストを表示できる[最近]タブをクリックします。不要なものを見つけて削除します。次に、何も追加せずに閉じます。


1
これは、参照が使用されているかどうかを確認しません
Xavier Poinas '

-12

Visual C#で参照を削除するにはソリューションエクスプローラーで、プロジェクトノードの下の[参照]ノードを開きます。参照を右クリックして、[削除]をクリックします。


3
これは、未使用のみに限定されたり、動作中に自動に限定されたりすることはないようです。
Nathan Tuggy、2015年

自動運転ではありません。
アミール

よく試されましたが、悪い答えです。前に述べたように自動ではありません
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.