Dapatkan Daftar Kode Referensi Nol di Visual Studio

133

Di visual studio 2013 jumlah referensi dari Kode khusus (metode, properti, bidang, ...) ditunjukkan oleh Code Lens . Saya ingin mendapatkan Kode (referensi nol) yang tidak digunakan di studio visual. Apakah ada cara untuk mendapatkannya?

Maksud saya referensi di bawah ini:

masukkan deskripsi gambar di sini

Nima Rostami
sumber
7
Saya pikir dia ingin daftar semua metode yang tidak dirujuk, daripada membawa jumlah referensi dari metode tertentu ke nol.
Jurgen Camilleri
1
Jika Anda tidak ingin mencari referensi yang tidak terpakai, Anda akan menemukan banyak pertanyaan duplikat. Hanya google untuk "c # temukan kode yang tidak digunakan"
Panagiotis Kanavos
1
ya saya ingin menemukan semua kode yang tidak digunakan berisi Metode, Properti, dll.
Nima Rostami
1
Ingatlah bahwa Anda tidak dapat memastikan bahwa a publictidak digunakan tanpa mencari seluruh basis kode. Namun, untuk internal dan privat yang tidak digunakan, Analisis Kode akan memperingatkan Anda jika Anda mengaktifkan peringatan yang sesuai.
Matthew Watson
2
Bertahun-tahun kemudian, tangkapan layar itu terus menyesatkan.
Sinjai

Jawaban:

184

Mungkin cara terbaik dan termudah untuk mencapai apa yang Anda kejar adalah dengan menggunakan alat analisis kode bawaan dengan Visual Studio untuk menemukan dan membawa Anda langsung ke kode mati dan anggota yang tidak digunakan.

Untuk efek ini, saya membuat file ruleset analisis kode baru (Via File-> New-> File , memastikan Umum di panel kiri dipilih dan gulir ke bawah untuk menemukan Kode Analisis Aturan Set , memberikan nama file, kemudian mencari dan memilih aturan di bawah ini). Lihat di bawah untuk mengetahui isi file ruleset yang dapat Anda salin, dan rekatkan ke file baru dengan ekstensi .ruleset untuk digunakan.

Diberikan file ruleset, orang dapat mengklik kanan pada file proyek di panel Solution Explorer , dan pilih Properties . Di jendela properti proyek, klik tab Analisis Kode di panel kiri, lalu klik Buka untuk meramban ke lokasi file .ruleset. Jika Anda pergi ke properti file solusi (sebagai lawan file proyek), Anda dapat mengatur file analisis kode untuk setiap proyek dalam solusi di satu tempat (di bawah Pengaturan Analisis Kode , dan menggunakan drop-down di sana untuk memilih CATATAN: Anda sebelumnya harus sudah meramban ke file ruleset agar muncul di drop-down di jendela properti ini, namun).

Kemudian Anda cukup menjalankan analisis kode pada proyek / solusi (Via Analisis-> Jalankan Analisis Kode Pada Solusi -OR- Alt + F11 ) dan itu akan kembali sebagai peringatan, metode yang tidak direferensikan atau anggota yang tidak digunakan yang ditemukannya. Ia bahkan akan menemukan metode yang dirujuk oleh suatu metode, yang dirinya sendiri tidak memiliki referensi di tempat lain.

Namun berhati-hatilah, karena salah satu cara analisis kode untuk kode mati dapat membuat Anda salah, adalah jika referensi tersebut 'disembunyikan' dengan hanya memanggil metode tersebut melalui delegasi, dan tentu saja, refleksi.

Aturan untuk mendeteksi kode mati, khususnya, adalah:

  • Metode pribadi yang tidak dipanggil dari kode lain mana pun (CA1811)
  • Variabel lokal yang tidak digunakan (CA1804)
  • Bidang pribadi yang tidak digunakan (CA1823)
  • Parameter yang tidak digunakan (CA1801)
  • Kelas internal yang tidak dipakai dari kode lain mana pun (CA1812).
  • Kode mati dalam saklar terbatas bitwise-ATAU (C6259)

Di bawah ini adalah isi dari file .ruleset yang dapat diperoleh dengan mengikuti langkah-langkah di atas, untuk kenyamanan Anda. Anda cukup menyalin XML di bawah ini, menempelkannya ke notepad ++, simpan di suatu tempat dengan ekstensi .ruleset , telusuri dan gunakan seperti dijelaskan di atas:

<?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>
Adam White
sumber
30
Saya kira ini tidak sepenuhnya menjawab pertanyaan. Perbedaan utama adalah CodeLens akan memberi tahu Anda bahwa metode PUBLIC tidak memiliki referensi di seluruh solusi. Ini kuncinya. FxCop, R #, dan metode Anda hebat untuk apa pun yang bukan untuk umum.
Scott Wylie
1
@ScottWylie - Saya tidak setuju. Saya Baru saja mencoba solusi di atas dan tidak menandai metode publik yang tidak direferensikan. CodeLens luar biasa dalam menandai kode mati, hal-hal lokal yang tidak direferensikan, dan variabel yang tidak digunakan. Saya pikir ini membuat kebanyakan orang tepat apa yang mereka inginkan tanpa menggunakan alat pihak ke-3.
Mike
7
@mike Pertimbangkan ini: Jika Anda ingin menemukan kode mati dengan operasi massal, Anda cenderung tidak peduli dengan anggota pribadi / terlindungi, karena ini adalah masalah lokal. Sebagai contoh, saya melakukan migrasi proyek 500k + LoC dengan 100+ proyek dan 10+ solusi untuk arsitektur pola repositori. Setelah memigrasikan komponen, saya perlu tahu antarmuka lama mana yang bisa saya hapus. Beberapa IDE seperti Eclipse memiliki alat untuk hal itu. Metode lokal greyed-out bukan urusan saya, saya ingin daftar kelas / antarmuka PUBLIC di mana kode lensa akan memberi tahu saya "0".
Oliver Schimmer
0

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

"Sayangnya, [dalam Analisis Visual Studio] Anda hanya dapat mendeteksi anggota pribadi yang tidak digunakan. Ini karena penganalisa kode mengasumsikan anggota publik dapat digunakan oleh program lain. Ini bisa benar jika Anda menerbitkannya sebagai API melalui layanan web atau melepaskan kode Anda sebagai pustaka .... ReSharper memiliki fungsi analisis kode serupa - dengan keuntungan memeriksa anggota publik yang tidak digunakan. "

V Frenkel
sumber
0

Saya akan pergi melalui setiap file, melakukan perintah Ctrl-MO untuk menutup semuanya, lalu gulir sekitar mencari referensi 0.

pengguna1730026
sumber
-1

Inilah cara manual untuk mencapai hal ini yang saya gunakan untuk menemukan Kelas yang tidak digunakan yang ditandai publik.

  1. Cari dan Ganti semua "kelas publik" dengan "kelas privat" untuk satu proyek dalam solusi Anda. Mungkin juga perlu mengganti "kelas statis publik" dan / atau "kelas abstrak publik".
  2. Bangun untuk menemukan semua kesalahan
  3. Untuk setiap kesalahan dalam pembuatan, gunakan kontrol sumber Anda untuk mengembalikan file untuk kelas referensi.
  4. Ulangi untuk setiap kesalahan sampai build berhasil.
  5. File yang tersisa yang belum dipulihkan kemungkinan akan dihapus.
  6. (opsional) Ganti nama kelas dalam file di atas dan lakukan satu build lagi untuk menemukan kesalahan.
  7. Lakukan satu pencarian terakhir untuk nama kelas yang ingin Anda hapus untuk mengonfirmasi tidak ada contoh yang digunakan dalam refleksi atau string sihir.
  8. Hapus file kelas yang tidak digunakan yang diidentifikasi.
  9. Ulangi untuk setiap proyek solusi yang ingin Anda bersihkan.

Catatan: Jika Anda tidak mengikuti satu kelas per aturan file, ini akan membutuhkan lebih banyak pekerjaan. Juga, setiap titik akhir layanan API yang perlu Anda verifikasi tidak digunakan oleh proyek eksternal apa pun.

Ulfius
sumber
14
Ini sama sekali tidak praktis.
Don Rolling
1
Ini bekerja untuk saya dalam proyek besar dan merupakan salah satu solusi. Kasing dapat bervariasi di mana lebih sulit, tetapi saya ingin memberikan ini sebagai kemungkinan.
Ulfius