Kullanılmayan referansları kaldırın (! = "Kullanma")


100

Projelerimde kullanılmayan referansları nasıl bulabilir ve silebilirim?

2008'e karşı kullanım ifadelerini kolayca kaldırabileceğinizi biliyorum, ancak bu, projelerinizdeki gerçek referansı kaldırmaz. Başvurulan dll yine de bin / kurulum paketinize kopyalanacaktır.


Teşekkürler. Ne yazık ki, aradığım cevap yok ...
Boris Callens

Yanıtlar:


55

* Not: Bu cevabın başka bir versiyonu için http://www.jetbrains.net/devnet/message/5244658 adresine bakın .

Gönderileri okurken, orijinal soruyla ilgili bazı karışıklıklar var gibi görünüyor. Bir bıçak alayım.

Orijinal gönderi gerçekten şu soruyu soruyor: "Bir Visual Studio projesinden kullanımda olmayan diğer projelere / derlemelere başvuruları nasıl belirleyip kaldırabilirim?" Poster, derlemelerin artık yapı çıktısının bir parçası olarak görünmemesini istiyor.

Bu durumda, ReSharper onları tanımanıza yardımcı olabilir , ancak bunları kendiniz kaldırmanız gerekir.

Bunu yapmak için, Çözüm Tarayıcısındaki Referanslar'ı açın, referans verilen her bir montaja sağ tıklayın ve "Bağımlı Kodu Bul" u seçin. Görmek:

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

Ya alacaksın:

  1. Bir tarayıcı penceresinde söz konusu Referansa bağımlılıkların listesi veya

  2. Size "XXXXXXX modülüne bağlı kod bulunamadı" diyen bir iletişim kutusu.

İkinci sonucu alırsanız, Referans'a fareyle sağ tıklayıp Kaldır'ı seçebilir ve projenizden kaldırabilirsiniz.

Buna "elle", yani her seferinde bir referansa ihtiyacınız olsa da, işi halledecektir. Herhangi biri bunu bir şekilde otomatik hale getirdiyse, nasıl yapıldığını duymakla ilgileniyorum.

Normalde derleme çıktınıza kopyalanmadıkları için .Net Framework'tekileri hemen hemen yok sayabilirsiniz (tipik olarak - Silverlight uygulamaları için doğru olmasa da).

Bazı gönderiler şu soruyu yanıtlıyor gibi görünüyor: "Bir kaynak kodu dosyasından, bu dosyadaki herhangi bir başvuruyu çözümlemek için gerekli olmayan cümlecikleri (C #) kullanarak nasıl kaldırırım".

Bu durumda ReSharper birkaç şekilde yardımcı olur:

  1. Anında hata tespiti sırasında sizin için kullanılmayan kullanım maddelerini tanımlar. Kod İnceleme Uyarıları olarak görünürler - kod dosyada gri renkte görünür (varsayılan olarak) ve ReSharper bunu kaldırmak için bir İpucu sağlar:

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

  2. Kod Temizleme İşleminin bir parçası olarak bunları otomatik olarak kaldırmanıza olanak tanır:

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

Son olarak, ReSharper'ın çözümünüz üzerinde statik kod analizi yaptığını fark edin. Dolayısıyla, montaja yönelik dinamik bir referansınız varsa - örneğin çalışma zamanında dinamik olarak yüklenen ve bir arabirim aracılığıyla erişilen bir yansıma veya montaj aracılığıyla - onu almaz. Projeniz üzerinde çalışırken kod tabanınızı ve proje bağımlılıklarını anlamanın yerini hiçbir şey tutamaz. ReSharper özelliklerini çok kullanışlı buluyorum.


Güzel, kapsamlı cevap. Garip olan şu ki, kullanım ifadelerine atıfta bulunmadığımı bilmenize rağmen (bu temizleme VS'de standarttır, R # bunu neden yeniden icat ettiğini anlamayın) önce bu soruyu yanıtlarsınız. İkisini değiştirir misin?
Boris Callens

Yapacağım. ReSharper'ın özelliği Visual Studio uygulamasından önce gelir. "Otomatik düzeltme" özelliği ile elde edildiği gibi kalır - ReSharper'a sahip olduğunuzda Akıllı Etiketler kapatılır.
jlo

1
Şimdi ~ 4 yıl sonra ReSharper 6.1 bu özelliği doğrudan aldı!
Julien Roncaglia

Ne demek istediğinizden emin değilim - ReSharper bu özelliğe yıllardır sahip.
jlo

8
FARKINDA OLUN: Montajlardan dinamik olarak yüklemek için herhangi bir yansıma kullanırsanız, bu yapılacak kötü bir şey olacaktır. Montajı sizinle birlikte depo / üretim sahasına taşımak için "referansı" kullanmış olacaksınız, ancak buna doğrudan referans veren bir kod olmayacak. DİKKATLİ KULLANIN!
Casper Leon Nielsen



5

Şunu deneyin: Referans Yardımcısı

Özet

Reference Assistant, Visual Studio 2010'da C #, F #, VB.NET veya VC ++ / CLI projelerinden kullanılmayan başvuruları kaldırmaya yardımcı olur.


1
2012 vs için benzer bir uzantı biliyor musunuz?
isxaker

@isxaker Bu artık resharper'ın yerleşik bir özelliği
itslittlejohn

4

ReSharper 6.1 şu özellikleri içerecektir:

  • Referansları optimize edin : montaj referanslarınızı ve bunların koddaki kullanımlarını analiz edin, gereksiz referansların listesini alın ve bunları kaldırın.

  • Kullanılmayan Referansları Kaldır : Gereksiz montaj referanslarını kaldırmak için hızlı yeniden düzenleme.

  • Montaj referanslarında güvenli silme : Hepsi gereksizse montaj referanslarını siler, aksi takdirde kullanımları dağıtır ve seçilen listenin yalnızca fazlalık montaj referanslarını kaldırabilir.


4

ReSharper bunu sizin için yapacak (ve çok daha fazlasını!)


Resharper, Başvurular klasöründeki DLL başvurusunu gerçekten kaldıracak mı? Bunu yaptığını sanmıyorum?
tobinharris

1
Bunun olacağını sanmıyorum ... Bence bu sadece başvurmadığınız bir ad alanı için using ifadesini çekiyor. FWIW - Coderush aynı işlevselliği "ve çok daha fazlasını sunuyor!" :)
Samurai Ken

1
Şimdi ~ 4 yıl sonra ReSharper 6.1 özelliğe sahip!
Julien Roncaglia

3

Bunu VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly'de uzantı yapmadan yaptım, kullanılan derlemeleri gösterir ve kullanılmayan referansları manuel olarak kaldırdım.


Bunu daha büyük bir proje için önermiyorum. Neyin kullanıldığını ve neyin kullanılmadığını ayırt etmeyi çok zor buldum. Ben de renk körü olsam da, bu benim için yararlılığını muhtemelen etkiledi.
DubiousPusher

2

Visual Studio'nun herhangi bir sürümünde ve herhangi bir Framework sürümünde çalışan ücretsiz bir cevabım var. Kullanılmayan referansları kaldırmaz, ancak onları tanımlar.

Telerik JustDecompile'ı proje dll'nizde kullanabilirsiniz . JustDecompile'da dll'yi açın Referencesve derlenen dll'de gerçekte ne kullanıldığını görmek için aşağıya gidin .

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


1
Bence bu harika bir çözüm! VS eklentileri yazıyor musunuz? :) ILSpy'ın bir eklentisi var ve bir şekilde kolayca yarı otomatik hale getirilip getirilemeyeceğini göreceğim ...
Steven Coco

@StevenCoco Uzun zamandır yapmadım ama IDE api internette birçok iyi örnekle oldukça basit. İyi şanslar ve tamamlarsanız projenizi bize bildirin!
Toddmo

0

VisualStudio'nun (veya msbuild mi?) Kullanılmayan referansları algıladığı ve bunları çıktı dosyasına dahil etmediği göz önüne alındığında, referansları csproj'dan ayrıştıran ve bunu, proje çıktısı.

Motive olursan ...


1
Bu her zaman doğru değildir. Örneğin, Bar'dan türetilen Foo sınıfınız varsa ve Bar'da Statik üyeniz Blah varsa ve bunu Foo.Blah olarak adlandırırsanız, derleyici referanslarında Foo derlemesine sahip olmanız gerekir, ancak yayılmayacaktır. çıktıya, çünkü statik üye Bar'da. Bunun gibi birkaç durum daha var.
Ilya Ryzhenkov

Evet, senaryomda bazı 'boşluklar' olduğunu fark ettim, nedenini çözemedim. Bilgi için teşekkürler.
Benjol

0

Sanırım bunlar bin \ 'de kopyalandı, çünkü referansı kaldıran projede aynı referansa sahip başka bir proje referansı var ...


0

Hangi referansların kullanılmadığını biliyorsanız, bunları manuel olarak kaldırabilirsiniz.
Çözüm Gezgini'nde Başvurular düğümündeki başvuruyu sağ tıklatın ve ardından Kaldır'ı tıklatın.

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.