Usuń nieużywane odniesienia (! = „Using”)

100

Jak mogę znaleźć i usunąć nieużywane referencje w moich projektach?

Wiem, że możesz łatwo usunąć instrukcje using w porównaniu z 2008 r., Ale nie usuwa to rzeczywistego odniesienia w twoich projektach. Biblioteka dll, do której istnieje odwołanie, będzie nadal kopiowana do twojego pakietu bin / setup.

Boris Callens
źródło
dzięki. Niestety brak odpowiedzi, której szukałem ...
Boris Callens
możliwy duplikat narzędzi do znajdowania nieużywanych referencji
David Schmitt

Odpowiedzi:

55

* Uwaga: zobacz http://www.jetbrains.net/devnet/message/5244658, aby uzyskać inną wersję tej odpowiedzi.

Czytając posty, wygląda na to, że jest pewne zamieszanie co do pierwotnego pytania. Pozwól, że się tym zajrzę.

Oryginalny post tak naprawdę zadaje pytanie: „Jak zidentyfikować i usunąć odwołania z jednego projektu Visual Studio do innych projektów / zestawów, które nie są używane?” Plakat chce, aby zestawy nie były już wyświetlane jako część wyników kompilacji.

W takim przypadku ReSharper może pomóc ci je zidentyfikować , ale musisz je usunąć samodzielnie.

Aby to zrobić, otwórz References inth Solution Browser, kliknij prawym przyciskiem myszy każdy przywoływany zespół i wybierz „Znajdź zależny kod”. Widzieć:

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

Otrzymasz albo:

  1. Lista zależności tego odwołania w oknie przeglądarki lub

  2. Okno dialogowe z informacją „Nie znaleziono kodu zależnego od modułu XXXXXXX”.

Jeśli uzyskasz drugi wynik, możesz kliknąć prawym przyciskiem myszy odniesienie, wybrać Usuń i usunąć je z projektu.

Chociaż musisz to zrobić „ręcznie”, tj. Po jednym odwołaniu na raz, zadanie zostanie wykonane. Jeśli ktoś zautomatyzował to w jakiś sposób, chciałbym usłyszeć, jak to się stało.

Możesz zignorować te w .Net Framework, ponieważ normalnie nie są one kopiowane do wyniku kompilacji (zazwyczaj - choć niekoniecznie w przypadku aplikacji Silverlight).

Niektóre posty wydają się odpowiadać na pytanie: „Jak usunąć klauzule using (C #) z pliku kodu źródłowego, które nie są potrzebne do rozwiązania jakichkolwiek odwołań w tym pliku”.

W tym przypadku ReSharper pomaga na kilka sposobów:

  1. Identyfikuje nieużywane klauzule using podczas wykrywania błędów w locie. Pojawiają się jako ostrzeżenia o inspekcji kodu - kod będzie wyszarzony (domyślnie) w pliku, a ReSharper poda wskazówkę, aby go usunąć:

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

  2. Umożliwia automatyczne usuwanie ich w ramach procesu czyszczenia kodu:

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

Wreszcie, zdaj sobie sprawę, że ReSharper wykonuje statyczną analizę kodu twojego rozwiązania. Tak więc, jeśli masz dynamiczne odniesienie do zestawu - powiedzmy przez odbicie lub zestaw, który jest dynamicznie ładowany w czasie wykonywania i dostępny przez interfejs - nie zostanie odebrany. Nic nie zastąpi zrozumienia podstawy kodu i zależności projektu podczas pracy nad projektem. Uważam, że funkcje ReSharper są bardzo przydatne.

jlo
źródło
Niezła, obszerna odpowiedź. Dziwne jest to, że chociaż wiesz, że nie odnoszę się do instrukcji using (to czyszczenie jest standardem w VS, nie rozumiem, dlaczego R # wymyślił to ponownie), najpierw odpowiadasz na to pytanie. Czy mógłbyś zamienić te dwa miejsca?
Boris Callens
Zrobi się. Funkcja ReSharper poprzedza implementację programu Visual Studio. Pozostaje tak, jak jest to osiągane dzięki ich funkcji „autokorekty” - tagi inteligentne są wyłączane, gdy masz ReSharper.
jlo
1
Teraz, ~ 4 lata później, ReSharper 6.1 otrzymał tę funkcję bezpośrednio!
Julien Roncaglia,
Nie jestem pewien, co masz na myśli - ReSharper ma tę funkcję od lat.
jlo
8
UWAŻAJ: Jeśli używasz jakiegokolwiek odbicia do dynamicznego ładowania ze złożeń, będzie to złe postępowanie. Będziesz używał „referencji”, aby przenieść zespół ze sobą do pojemnika / miejsca produkcji, ale nie będzie kodu odnoszącego się do niego bezpośrednio. UŻYWAJ OSTROŻNIE!
Casper Leon Nielsen
5

Spróbuj tego: Asystent odniesień

Podsumowanie

Reference Assistant pomaga usunąć nieużywane odwołania z projektów C #, F #, VB.NET lub VC ++ / CLI w programie Visual Studio 2010.

Leniel Maccaferri
źródło
1
może znasz podobne rozszerzenie dla vs 2012?
isxaker,
@isxaker To jest teraz wbudowana funkcja programu
resharper
4

ReSharper 6.1 będzie zawierał następujące funkcje:

  • Zoptymalizuj odwołania : przeanalizuj odwołania do zestawów i ich zastosowania w kodzie, pobierz listę zbędnych odwołań i usuń je.

  • Usuń nieużywane odniesienia : szybka refaktoryzacja w celu usunięcia zbędnych odwołań do zestawów.

  • Bezpieczne usuwanie odniesień do zestawów: usuwa odniesienia do zestawów, jeśli wszystkie z nich są nadmiarowe, w przeciwnym razie usuwa użycie i może usunąć tylko nadmiarowe odniesienia do zestawów z wybranej listy.

Kirill Skrygan
źródło
4

ReSharper zrobi to za Ciebie (i wiele więcej!)

Chris Canal
źródło
Czy Resharper faktycznie usunie odwołanie do biblioteki DLL w folderze References? Myślę, że to nie robi?
tobinharris
1
Myślę, że nie będzie ... Myślę, że po prostu szarpie instrukcję using dla przestrzeni nazw, do której się nie odwołujesz. FWIW - Coderush oferuje tę samą funkcjonalność „i wiele więcej!” :)
Samurai Ken
1
Teraz, ~ 4 lata później, ReSharper 6.1 otrzymał tę funkcję!
Julien Roncaglia,
3

Zrobiłem to bez rozszerzenia w VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, pokazuje używane zestawy i ręcznie usuwa nieużywane odwołania.

mes
źródło
Nie polecam tego przy większym projekcie. Bardzo trudno było mi stwierdzić, co było, a co nie było używane. Tak się składa, że ​​jestem daltonistą, więc prawdopodobnie wpłynęło to na moją przydatność.
DubiousPusher,
2

Mam bezpłatną odpowiedź, która działa w dowolnej wersji Visual Studio i dowolnej wersji Framework. Nie usuwa nieużywanych odniesień, ale je identyfikuje.

Możesz użyć Telerik JustDecompile na swoim projekcie dll. Po prostu otwórz bibliotekę dll w JustDecompile i przejdź pod, Referencesaby zobaczyć, co jest faktycznie używane w skompilowanej bibliotece dll.

wprowadź opis obrazu tutaj

toddmo
źródło
1
Myślę, że to świetne rozwiązanie! Piszesz wtyczki VS? :) ILSpy ma wtyczki, i mam zamiar sprawdzić, czy może on być łatwo półautomatyczny jakoś ...
Steven Coco
@StevenCoco Od dawna nie mam, ale interfejs API IDE jest dość prosty i zawiera wiele dobrych przykładów w Internecie. Powodzenia i poinformuj nas o swoim projekcie, jeśli go wykonasz!
toddmo
0

Biorąc pod uwagę, że VisualStudio (a może jest to msbuild?) Wykrywa nieużywane odwołania i nie umieszcza ich w pliku wyjściowym, można napisać skrypt, który analizuje odwołania z csproj i porównuje go z odniesieniami do zestawów wykrytych przez odbicie w wyniki projektu.

Jeśli masz motywację ...

Benjol
źródło
1
Nie zawsze jest to poprawne. Na przykład, jeśli masz klasę Foo, która pochodzi od Bar i masz statyczny element członkowski Blah w Bar i nazywasz go Foo.Blah, to musisz mieć assembler Foo w referencjach dla kompilatora, ale nie zostanie on wyemitowany na wyjściu, ponieważ element statyczny znajduje się w pasku. Takich przypadków jest więcej.
Ilya Ryzhenkov
Tak, zauważyłem pewne „dziury” w moim skrypcie i nigdy nie udało mi się ustalić, dlaczego. Dzięki za informację.
Benjol,
0

Myślę, że są kopiowane w bin \, ponieważ w projekcie, który usunął odniesienie, mają odniesienia do innych projektów, które mają to samo odniesienie ...

hdmq
źródło
0

Jeśli wiesz, które odwołania nie są używane, możesz je usunąć ręcznie.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy odwołanie w węźle odwołania , a następnie kliknij przycisk Usuń.

gruby
źródło