Menghapus semua referensi yang tidak digunakan dari proyek di proyek Visual Studio

263

Saya hanya ingin tahu apakah mungkin dalam berbagai versi Visual Studio untuk secara otomatis menghapus semua referensi dari proyek yang tidak pernah digunakan?

Dalam jawaban Anda, harap sebutkan versi VS mana solusi berlaku untuk.

KroaX
sumber
4
Umumnya bertanya-tanya, Apakah menghapus DLL ini menghasilkan peningkatan yang dapat diamati dalam waktu pembuatan atau sesuatu yang lain? (Tentu saja, selain menghapus ketergantungan yang berlebihan)
monish001
3
apakah ada ekstensi gratis serupa untuk VS2015?
George Birbilis
1
Proyek VB.Net sudah memilikinya sejak VS 2005, tetapi tidak pernah diimplementasikan untuk proyek C # msdn.microsoft.com/en-us/library/7sfxafba
Slai
4
Anda dapat memilih untuk menyertakan fitur ini sebagai bagian dari VS (sebagaimana mestinya).
Mike Lowery
2
@ monish001 - setiap unit dan aset meningkatkan jejak penggunaan dan merupakan hal lain untuk mengelola / mempertahankan atau menjadi sumber potensial untuk bug.
StingyJack

Jawaban:

55

Jika Anda menginstal Resharper (plugin), Anda dapat mengakses fitur yang memungkinkan Anda menganalisis referensi yang digunakan melalui Solution Explorer> (klik kanan) Referensi> Optimalkan Referensi ...

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

Fitur ini tidak menangani dengan benar:

  • Majelis ketergantungan disuntikkan
  • Rakitan yang dimuat secara dinamis (Assembly.LoadFile)
  • Majelis kode asli dimuat melalui interop
  • Kontrol ActiveX (COM interop)
  • Cara kreatif lainnya untuk memuat rakitan

masukkan deskripsi gambar di sini

Ernest
sumber
1
Pernyataan terakhir Anda "Namun itu tidak sempurna, semua majelis yang bergantung pada majelis referensi dalam proyek Anda saat ini masih ditandai sebagai tidak terpakai." sebenarnya bukan masalah. Build tahu untuk menyalin referensi dari referensi Anda. Lihat jawaban ini: stackoverflow.com/a/2290139/26262
Ed Greaves
Meskipun ini adalah cara yang layak untuk melakukan ini "dalam berbagai versi Visual Studio" bagi saya tidak berarti sesuatu yang lain tetapi sudah "dalam"
Mark Schultheiss
28

The ekstensi Resharper akan melakukan ini untuk Anda.

Ekstensi ini mendukung Visual Studio 2005 hingga 2017.

Walaupun kompiler tidak akan menyertakan rakitan yang tidak digunakan, penggunaan statemen dan referensi yang tidak digunakan memperlambat Visual Studio dan Intellisense, karena ada lebih banyak kode yang harus dipertimbangkan alat.

Mathieson
sumber
12
bahwa seseorang telah menemukan banyak referensi yang tidak digunakan dalam proyek - tetapi banyak dari mereka di mana benar-benar digunakan ... Jadi saya tidak percaya Resharper dengan referensi
Offler
5
Resharper menghabiskan banyak memori dalam proyek-proyek besar ketika ada banyak referensi yang akhirnya lumpuh VS
Cemre
2
@eraj VS Express edisi tidak mendukung ekstensi, dapatkan edisi Komunitas gratis, yang mendukung ekstensi seperti ReSharper.
codemonkeh
4
Pete, semua alat otomatis akan memiliki kemungkinan penjangkauan yang berlebihan. Khususnya pada usia DI dan ketergantungan PCL yang tampaknya tidakunsun mungkin diperlukan, tapi itu bukan kesalahan alat. Daripada melakukan tangkapan layar, Anda harus menggunakan perangkat lunak kontrol versi. Sistem modern seperti Git atau Hg akan memungkinkan Anda melakukan checkin secara lokal, sehingga Anda tidak akan kehilangan pekerjaan.
Mathieson
2
sejauh yang saya tahu memberitahu Resharper menunjukkan ruang nama yang tidak digunakan, bukan rakitan referensi yang menurut saya pertanyaan "referensi yang tidak terpakai dari suatu proyek" berarti. Saya juga ingin menemukan yang terakhir
Sonic Soul
28

Anda dapat mencoba ekstensi VS2010 gratis: Asisten Referensi oleh kelompok Lardite. Ini bekerja dengan baik untuk saya. Alat ini membantu menemukan referensi yang tidak digunakan dan memungkinkan Anda memilih referensi mana yang harus dihapus.

Edan
sumber
3
Tidak bekerja dengan proyek MVC. Ini menghapus DLL penting sebagai .Helpers dan .WebPage
User.Anonymous
3
@Amit ekstensi memiliki versi yang berfungsi untuk VS2012 sekarang
Philipp M
Itu bekerja jika Anda mengikuti trik sederhana: devio.wordpress.com/2014/12/03/...
ravi punjwani
5
dan untuk VS2019?
DARKG Beli
21

Dalam proyek Visual Basic ada dukungan untuk menghapus "Referensi Tidak Digunakan" (Proyek -> Referensi -> Referensi Tidak Digunakan). Di C # tidak ada fungsi seperti itu.

Satu-satunya cara untuk melakukannya dalam proyek C # (tanpa alat lain) adalah dengan menghapus kemungkinan rakitan yang tidak digunakan, kompilasi proyek dan verifikasi jika ada kesalahan yang terjadi selama kompilasi. Jika tidak ada kesalahan terjadi, Anda telah menghapus rakitan yang tidak digunakan. ( Lihat posting saya )

Jika Anda ingin tahu proyek mana (perakitan) tergantung pada majelis lain, Anda dapat menggunakan NDepend .

Yah
sumber
2
Di VS 2008/2010 ada opsi menu klik kanan untuk menghapus atau menghapus dan mengurutkan penggunaan.
JohnB
11
@ JohnB: Tentu saja Anda benar, tetapi pertanyaannya adalah tentang referensi (untuk majelis) dan bukan usings (ruang nama).
Jehof
VS2012: menu: Project-> properties-> Referensi-> Referensi yang tidak digunakan.
LosManos
20

Untuk Visual Studio 2013/2015/2017 ada ekstensi yang melakukan apa yang Anda inginkan: ResolveUR . Apa yang pada dasarnya dilakukannya adalah:

  • referensi dihapus dalam proyek
  • proyek dikompilasi dengan msbuild
  • periksa kesalahan build
  • pulihkan referensi yang dihapus jika ada kesalahan build.
Claudiu Constantin
sumber
baru saja menginstalnya untuk VS 2017 Community Edt. - berfungsi dengan baik sejauh ini.
Thomas
ia mengatakan ada kesalahan build tetapi tidak ada kesalahan build ketika saya membangun sehingga tidak berfungsi vs2015 comm edtion
Raghavendra
Anda dapat membuat masalah di halaman github: github.com/subatta/ResolveUR/issues
Claudiu Constantin
5
2.5 dari 5 bintang pada Visual Studio Marketplace dari 52 ulasan menempatkan saya off sedikit
ECH
Sudah mencobanya di Proyek MVC dan ia mengusulkan untuk menghapus beberapa dependensi penting seperti System.Web.Helpers jadi saya enggan untuk membiarkannya berjalan sendiri.
Jahaziel
19

Yang Anda butuhkan hanyalah batu dan buku jari maka Anda bisa melakukannya seperti manusia gua.

  1. Hapus ruang nama yang tidak digunakan (untuk setiap kelas)
  2. Jalankan Debug build
  3. Salin referensi namespace yang dapat dieksekusi dan yang tersisa ke lokasi baru
  4. Jalankan executable
  5. Referensi Hilang Kesalahan DLL akan terjadi
  6. Salin DLL yang diperlukan dari folder Debug
  7. Ulangi 4-6
  8. Gu Gu Ga Ga?
  9. Lempar batumu

Anda juga dapat mengandalkan alat bangun Anda untuk memberi tahu Anda referensi mana yang masih diperlukan. Ini era VS 2017, manusia gua masih selamat.

Eark
sumber
Haha, well, tidak ada yang salah dengan sedikit humor di sini. Pendekatan stoneman memang, sepertinya tanpa menghabiskan edisi Enterprise seperti yang kita punya sekarang.
Nicholas Petersen
16

Bagi siapa pun yang datang ke sini mencari Visual studio 2012 :

Unduh dan Instal Asisten Referensi untuk Visual Studio 11

Nanti bisa Anda lakukan:

masukkan deskripsi gambar di sini

Habib
sumber
1
Asisten Referensi untuk Visual Studio 11 tampaknya tidak akurat, itu menunjukkan kepada saya banyak referensi yang tidak digunakan yang saya tahu benar-benar digunakan (diinstal melalui Nuget).
Bill Yang
1
Tidak bekerja dengan proyek MVC. Ini menghapus DLL penting sebagai .Helpers dan .WebPage
User.Anonymous
Ya, ini kembali menggigitku menggunakan program WPF C #.
Charles Clayton
Bukan pilihan di VS2017
Nathan
1
Juga tidak ada di VS2019
Vin Shahrdar
15

Dengan Visual Studio versi 2017 dan 2015, Anda dapat melakukan ini dengan fitur Kode Peta , tetapi fitur ini hanya tersedia di Edisi Perusahaan , bukan versi Komunitas atau Profesional .

Klik kanan pada simpul proyek di penjelajah solusi dan pilih 'Tunjukkan pada Peta Kode.' Ini akan menampilkan .dll Anda sebagai satu simpul dalam grafik kosong. Klik kanan pada simpul itu di Peta Kode dan pilih "Tampilkan Sidang Referensi Ini." Ini akan menambahkan simpul tambahan yang disebut "Eksternal" yang dapat diperluas untuk menunjukkan hanya rakitan yang benar-benar dirujuk.

masukkan deskripsi gambar di sini

Glenn Slayden
sumber
1
Jika Anda memiliki edisi Perusahaan dan tidak melihat opsi ini di menu konteks, maka Anda perlu menginstal fitur "Kode Peta" dari pemasang VS di bawah panel Komponen Individual.
StingyJack
Ini bagus, Terima kasih @Glenn. Saya hanya ingin mengatakan bahwa saya sudah menggunakan Micosoft.Office.Interop.Excel dan tidak terdaftar di antara referensi lain, jadi masih harus sedikit hati-hati.
Emil Filip
14

Di Visual Studio 2013 ekstensi ini berfungsi: ResolveUR

Kegagalan Umum
sumber
15
@abarisone Respons generik "jangan gunakan tautan sebagai jawaban" seharusnya hanya digunakan SETELAH Anda benar-benar MENCARI jawabannya. Tautan adalah satu-satunya hal yang relevan untuk jawaban ini. Ini tautan ke plugin VS, jadi tidak ada yang relevan untuk disertakan.
Charles Boyung
Saya setuju dengan Charles. Ini sepertinya penyalahgunaan moderat dari @abarisone. Jawaban ini benar-benar membantu saya menghemat waktu dan saya akan membencinya jika ada mod yang menyalahgunakan kemampuan mereka untuk menghapusnya.
Zun
@Zun Pertama-tama saya tidak pernah menjadi moderator sama sekali atau mengaku sebagai moderator. Maksud saya adalah untuk meminta informasi lebih lanjut tentang ekstensi. Mungkin hal itu dangkal di pihak saya, tetapi saya jelas tidak bermaksud melakukan pelecehan.
abarisone
12

Beberapa orang menyarankan untuk menggunakan alat yang luar biasa - Asisten Referensi untuk Visual Studio . Masalahnya adalah bahwa VS2012 adalah Visual Studio terbaru yang didukung. Tetapi ada cara untuk membuatnya bekerja di VS2013 juga;)

Dan inilah caranya:

1) Unduh Lardite.RefAssistant.11.0.vsix

2) Ubah ekstensi menjadi zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Buka extension.vsixmanifestzip dan buka file dalam editor teks

4) Temukan semua kejadian InstallationTarget Version="[11.0,12.0)"dan gantikan dengan InstallationTarget Version="[11.0,12.0]"(perhatikan braket penutup)

5) Simpan file dan zip semua file sehingga mereka berada di tingkat zip root

6) Ubah ekstensi baru zipmenjadivsix

7) Instal dan nikmati :)

Saya sudah mengujinya dengan VS2013, terima kasih sumber untuk tutorialnya

EDIT Tambahkan untuk mendukung VS 2015 Edisi Komunitas

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

Arti kurung

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.
VladL
sumber
1
Ini berfungsi dengan baik! Sepertinya kesalahan ketik sederhana yang bisa diperbaiki bertahun-tahun yang lalu oleh penulis - tetapi ia tampaknya telah menghilang, setidaknya situs web memiliki ...
wexman
Ini bukan kesalahan ketik, tetapi versi VS tertinggi yang didukung :). Pengembang seharusnya menguji add-on-nya dengan setiap versi VS baru dan menambah jumlahnya, tetapi untuk beberapa alasan mereka tidak melakukan itu.
VladL
Ingatlah untuk berhenti "menyalin dan menempel" barang. :)
Rikki
@RikkiRockett Apakah Anda menyapa saya? Saya telah menautkan sumber dalam jawaban saya. Atau apa sebenarnya yang Anda maksud?
VladL
2
Nah man Aku hanya bercanda. Hanya mengatakan kepada pria yang menempatkan ")" bukannya "]" yang membuat kami semua membaca instruksi Anda. :) Kerja bagus, baru saja melakukan apa yang Anda katakan dan semuanya baik-baik saja! Anda baru saja menyelamatkan saya sehari karena berjuang dengan ini. (y)
Rikki
7

Anda dapat menggunakan ekstensi Reference Assistant dari galeri ekstensi Visual Studio.

Digunakan dan berfungsi untuk Visual Studio 2010.

eka808
sumber
2
Anda harus berhati-hati dengan proyek web. Ini melaporkan DLL yang digunakan sebagai "tidak digunakan".
Miro J.
Saya setuju dengan Miro. Saya mencoba menggunakan ini dengan proyek web saya dan memilih dua lusin referensi yang diperlukan untuk menjalankan aplikasi web saya (System.Web. *, Ninject. *, EntityFramework, hanya untuk beberapa nama).
Denis M. Kitchen
Tidak bekerja dengan proyek MVC. Ini menghapus DLL penting sebagai .Helpers dan .WebPage
User.Anonymous
1

Menggunakan DevExpress, saya mengikuti instruksi ini:

  1. Di VS, buka DevExpress - Editor - Pembersihan Kode. Di bawah Aturan, centang 'Hapus referensi namespace yang tidak digunakan'. Klik OK.
  2. Klik kanan pada solusinya, dan pilih 'Pembersihan Kode'. Pembersihan berjalan selama beberapa menit, dan selesai.
  3. Bangun aplikasi Anda
Solusi IndieTech
sumber
-3

Metode berikut ini tidak bergantung pada 'add-on' dan tidak terlalu menyakitkan.

Langkah melalui masing-masing file sumber Anda dan

  1. Pilih semua (Ctrl-A)
  2. Beralih ekspansi garis besar (Ctrl-M, M). Ini akan mengurangi file menjadi dua baris.
  3. Klik pada namespace's '+'. Ini akan menampilkan masing-masing kelas file sebagai satu baris. Pindai jumlah referensi setiap kelas, cari kelas yang tidak direferensikan.
  4. Klik pada masing-masing kelas '' + '. Ini akan menunjukkan masing-masing fungsi kelas sebagai satu baris. Pindai jumlah referensi masing-masing fungsi, cari fungsi yang tidak direferensikan.

Memindai setiap file yang mencari '0 referensi' hanya membutuhkan waktu satu detik.

Memindai seluruh proyek hanya membutuhkan beberapa menit.

NoBrassRing
sumber
-11

Di VB2008, ia bekerja seperti ini:

Project>Add References

Kemudian klik pada tab Recent di mana Anda dapat melihat daftar referensi yang digunakan baru-baru ini. Temukan yang tidak Anda inginkan dan hapus. Kemudian Anda menutup tanpa menambahkan apa pun.

pembuat kode
sumber
1
Ini tidak memeriksa apakah referensi sedang digunakan
Xavier Poinas
-12

Untuk menghapus referensi dalam Visual C # Dalam Solution Explorer, buka simpul Referensi di bawah simpul proyek. Klik kanan referensi dan klik Hapus.

Halit Can
sumber
3
Ini sepertinya tidak terbatas pada yang tidak terpakai saja atau otomatis dalam operasi.
Nathan Tuggy
ini bukan operasi otomatis.
Amir
dicoba dengan baik, tetapi jawaban buruk, tidak otomatis seperti yang dikatakan sebelumnya