Visual Studio'da Sıfır Referans Kodlarının Listesini Alın


133

Visual Studio 2013'te özel bir Kodun referans sayısı (yöntem, özellik, alan, ...) Code Lens tarafından gösterilir . Kullanılmayan (sıfır referans) Kodları görsel stüdyoda almak istiyorum . Onları almanın bir yolu var mı?

Referansın altında demek istiyorum:

görüntü açıklamasını buraya girin


7
Sanırım o belirli yöntemin referans sayısını sıfıra indirmek yerine, referans verilmeyen tüm yöntemlerin bir listesini istiyor.
Jurgen Camilleri

1
Eğer varsa do kullanılmayan başvuruları bulmak istiyorum, bir bulacağınız çok yinelenen sorulardan. Sadece "c # kullanılmayan kodu bul" için google
Panagiotis Kanavos

1
evet Kullanılmayan tüm kodların Yöntemler, Özellikler vb. içerdiğini bulmak istiyorum.
Nima Rostami

1
publicTüm kod tabanını aramadan a'nın kullanılmadığından emin olamayacağınızı unutmayın . Bununla birlikte, kullanılmayan dahili ve özel kişiler için Kod Analizi, uygun uyarıyı etkinleştirdiyseniz sizi uyaracaktır.
Matthew Watson

2
Yıllar sonra, ekran görüntüsü yanıltıcı olmaya devam ediyor.
Sinjai

Yanıtlar:


184

Muhtemelen peşinde olduğunuz şeyi elde etmenin en iyi ve en kolay yolu, sizi doğrudan ölü koda ve kullanılmayan üyelere bulmak ve götürmek için Visual Studio ile yerleşik kod analiz aracını kullanmaktır.

Bu amaçla, yeni bir kod analizi kural setleri dosyası (Via oluşturulan File-> New-> Dosya emin olarak, Genel seçildi sol bölmede ve bulmak için aşağı kaydırma Kod Analizi Kural Set ardından aranması ve, bunu bir dosya adı vererek aşağıdaki kuralları seçerek). Kullanmak için .ruleset uzantılı yeni bir dosyaya kopyalayıp yapıştırabileceğiniz kural kümesi dosyasının içeriği için aşağıya bakın.

Bir kural kümesi dosyası verildiğinde, Çözüm Gezgini panelinde bir proje dosyasına sağ tıklayıp Özellikler'i seçebilirsiniz . Proje özellikleri pencerelerinde, sol paneldeki Kod Analizi sekmesine tıklayın ve ardından .ruleset dosyasının konumuna göz atmak için Aç'a tıklayın . Bir çözüm dosyasının özelliklerine giderseniz (bir proje dosyasının aksine), çözümdeki her proje için kod analizi dosyasını tek bir yerde ayarlayabilirsiniz ( Kod Analizi Ayarları altında ve oradaki açılır menüyü kullanarak seçim yapmak için Kural kümesi dosyası NOT: Bu özellikler penceresindeki açılır menüde görünmesi için daha önce kural kümesi dosyasına göz atmış olmanız gerekir).

Daha sonra projeler / çözüm üzerinde kod analizini çalıştırmanız yeterlidir ( Çözüm Üzerinden Kod Analizini Çalıştır -VEYA- Alt + F11 ) ve bulduğu herhangi bir başvurulmamış yöntem veya kullanılmayan üyeler uyarı olarak geri gelecektir. Hatta kendisinin başka hiçbir yerde referansı olmayan bir yöntemle referans verilen yöntemleri bulacaktır.

Ancak dikkatli olun, ölü kod için kod analizinin sizi yanlış yönlendirmesinin yollarından biri, referansın yalnızca temsilciler aracılığıyla yöntemi çağırarak 'gizli' olması ve tabii ki yansıma olabilir.

Özellikle ölü kodu tespit etme kuralları şunlardır:

  • Başka herhangi bir koddan çağrılmayan özel yöntemler (CA1811)
  • Kullanılmayan yerel değişkenler (CA1804)
  • Kullanılmayan özel alanlar (CA1823)
  • Kullanılmayan parametreler (CA1801)
  • Başka herhangi bir koddan (CA1812) başlatılmayan dahili sınıflar.
  • Bitsel VEYA sınırlı anahtarda (C6259) ölü kod

Aşağıda, kolaylık sağlamak için yukarıdaki adımları izleyerek sahip olabileceğiniz .ruleset dosyasının içeriği bulunmaktadır. Aşağıdaki XML'yi kopyalayabilir, notepad ++ 'a yapıştırabilir, .ruleset uzantısıyla bir yere kaydedebilir , göz atabilir ve yukarıda açıklandığı gibi kullanabilirsiniz:

<?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>

30
Bunun soruyu tamamen yanıtladığını sanmıyorum. Temel fark, CodeLens'in size bir PUBLIC yönteminin tüm çözümde sıfır referansa sahip olduğunu söyleyecektir. Anahtar bu. FxCop, R # ve herkese açık olmayan her şey için harika yönteminiz.
Scott Wylie

1
@ScottWylie - Katılmıyorum. Sadece yukarıdaki çözümü denedim ve başvurulmamış genel yöntemleri işaretlemedi. CodeLens, ölü kodu, başvurulmayan yerel öğeleri ve kullanılmayan değişkenleri işaretlemede olağanüstü idi. Sanırım bu, çoğu insana 3. parti bir araç kullanarak tam olarak istediklerini alıyor.
mike

7
@mike Şunu bir düşünün: Toplu bir işlemle ölü kod bulmak istiyorsanız, özel / korumalı üyeleri umursamama eğiliminde olursunuz, çünkü bunlar yerel sorunlar. Örneğin, 100'den fazla proje ve 10'dan fazla çözüm içeren bir 500k + LoC projesini bir depo model mimarisine geçiriyorum. Bir bileşeni taşıdıktan sonra, hangi eski arayüzleri silebileceğimi bilmem gerekiyor. Eclipse gibi bazı IDE'lerin tam olarak bunun için araçları vardır. Grileştirilmiş yerel yöntemler benim endişem değil, kod merceğinin bana "0" göstereceği PUBLIC sınıfları / arayüzlerinin bir listesini istiyorum.
Oliver Schimmer

0

Herkese açık olarak işaretlenmiş kullanılmayan Sınıfları bulmak için kullandığım bunu başarmanın manuel bir yolu.

  1. Çözümünüzdeki bir proje için tüm "genel sınıfı" "özel sınıf" ile arayın ve değiştirin. "Public static class" ve / veya "public abstract class" ın da değiştirilmesi gerekebilir.
  2. Tüm hataları bulmak için oluşturun
  3. Derlemedeki her hata için, başvurulan sınıfa yönelik dosyayı geri yüklemek için kaynak denetiminizi kullanın.
  4. Derleme başarılı olana kadar her hata için tekrarlayın.
  5. Geri yüklenmemiş kalan dosyalar büyük olasılıkla kaldırılmaya adaydır.
  6. (isteğe bağlı) Yukarıdaki dosyalardaki sınıfları yeniden adlandırın ve hataları bulmak için bir yapı daha yapın.
  7. Yansımada veya sihirli dizelerde kullanılan herhangi bir örneği olmadığını doğrulamak için kaldırmak istediğiniz sınıfın adını son bir kez arayın.
  8. Tanımlanan kullanılmayan sınıf dosyalarını kaldırın.
  9. Temizlemek istediğiniz her çözüm projesi için tekrarlayın.

Not: Dosya başına bir sınıf kuralına uymazsanız, bu çok daha fazla çalışma gerektirir. Ayrıca, herhangi bir API hizmeti uç noktasının herhangi bir harici proje tarafından kullanılmadığını doğrulamanız gerekecektir.


14
Bu hiç de pratik değil.
Don Rolling

1
Benim için büyük bir projede işe yarıyor ve bir çözüm. Durumlar daha zor olduğu yerlerde değişebilir, ancak bunu bir olasılık olarak sunmak istedim.
Ulfius

0

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

"Maalesef, [Visual Studio Analysis'te] yalnızca kullanılmayan özel üyeleri tespit edebilirsiniz. Bunun nedeni, kod analizcisinin genel üyelerin diğer programlar tarafından kullanılabileceğini varsaymasıdır. Bunları bir web hizmeti aracılığıyla API olarak yayınlıyorsanız bu doğru olabilir veya kodunuzu bir kitaplık olarak yayınlamak. ... ReSharper, benzer kod analizi işlevlerine sahiptir - kullanılmayan genel üyeleri kontrol etme avantajı. "


0

Her dosyaya bakardım, her şeyi daraltmak için Ctrl-MO komutunu kullanırdım, sonra 0 referansını aramak için gezinirdim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.