Usuwanie wszystkich nieużywanych referencji z projektu w projektach Visual Studio

263

Zastanawiałem się tylko, czy w różnych wersjach programu Visual Studio można automatycznie usunąć wszystkie odwołania z projektu, które nigdy nie były używane?

W odpowiedzi proszę określić, której wersji VS dotyczy rozwiązanie.

KroaX
źródło
4
Ogólnie zastanawiasz się, czy usunięcie tych bibliotek DLL powoduje zauważalną poprawę czasu kompilacji czy coś innego? (Oczywiście, oprócz usuwania zbędnych zależności)
monish001,
3
czy jest jakieś podobne bezpłatne rozszerzenie dla VS2015?
George Birbilis,
1
Projekt VB.Net ma go od VS 2005, ale nigdy nie został zaimplementowany dla projektów w C # msdn.microsoft.com/en-us/library/7sfxafba
Slai
4
Możesz głosować, aby włączyć tę funkcję jako część VS (tak jak powinno być).
Mike Lowery,
2
@ monish001 - każdy zestaw i zasób zwiększa ślad wdrożenia i jest kolejną rzeczą do zarządzania / utrzymania lub potencjalnym źródłem błędów.
StingyJack

Odpowiedzi:

55

Jeśli masz zainstalowany Resharper (wtyczka), możesz uzyskać dostęp do funkcji, która pozwala analizować używane referencje za pomocą Solution Explorer> (kliknij prawym przyciskiem myszy) Referencje> Optymalizuj referencje ...

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

Ta funkcja nie obsługuje poprawnie:

  • Zespoły wstrzykiwane w zależności
  • Dynamicznie ładowane złożenia (Assembly.LoadFile)
  • Zespoły kodu rodzimego ładowane przez interop
  • Formanty ActiveX (interakcja COM)
  • Inne kreatywne sposoby ładowania zestawów

wprowadź opis zdjęcia tutaj

Ernest
źródło
1
Twoja ostatnia wypowiedź „Jednak nie jest to idealne, wszystkie zespoły zależne od zestawów referencyjnych w bieżącym projekcie są nadal oznaczone jako nieużywane”. tak naprawdę nie stanowi problemu. Kompilacja wie, jak skopiować referencje do twoich referencji. Zobacz tę odpowiedź: stackoverflow.com/a/2290139/26262
Ed Greaves
Chociaż jest to realny sposób na zrobienie tego, „w ramach różnych wersji programu Visual Studio” oznacza dla mnie nie coś innego, ale już „wewnątrz”
Mark Schultheiss,
28

Przedłużenie Resharper zrobi to za Ciebie.

To rozszerzenie obsługuje program Visual Studio 2005 do 2017.

Chociaż kompilator nie będzie zawierał nieużywanych zestawów, dodatkowe użycie instrukcji i referencji spowalnia Visual Studio i Intellisense, ponieważ narzędzia muszą uwzględniać więcej kodu.

Mathieson
źródło
12
że w
naszym
5
Resharper zużywa mnóstwo pamięci w dużych projektach, gdy istnieje wiele odniesień, które ostatecznie powodują awarię VS
Cemre
2
Wersje @eraj VS Express nie obsługują rozszerzeń, pobierz bezpłatną wersję Community, która obsługuje rozszerzenia takie jak ReSharper.
codemonkeh
4
Pete, każde zautomatyzowane narzędzie będzie miało możliwość przekroczenia zasięgu. Zwłaszcza w dobie DI i PCL zależności, które wydają się nieuzbrojone, mogą być potrzebne, ale nie jest to wina narzędzia. Zamiast robić zrzut ekranu, powinieneś używać oprogramowania do kontroli wersji. Nowoczesny system, taki jak Git lub Hg, umożliwia częste meldowanie się lokalnie, dzięki czemu nigdy nie tracisz pracy.
Mathieson,
2
o ile mogę powiedzieć, Resharper pokazuje nieużywane przestrzenie nazw, a nie odwołania do zestawów, co moim zdaniem oznacza pytanie „nieużywane odniesienia z projektu”. Też chciałbym znaleźć to drugie
Sonic Soul
28

Możesz wypróbować bezpłatne rozszerzenie VS2010: Reference Assistant by Lardite group. Działa dla mnie idealnie. To narzędzie pomaga znaleźć nieużywane referencje i pozwala wybrać, które referencje powinny zostać usunięte.

Głupi
źródło
3
Nie działa z projektem MVC. Usuwa niezbędne biblioteki DLL jako .Helpers i .WebPage
User.Anonymous
3
@Amit to rozszerzenie ma teraz działającą wersję dla VS2012
Philipp M
Działa to, jeśli zastosujesz prostą sztuczkę: devio.wordpress.com/2014/12/03/...
ravi punjwani
5
i dla VS2019?
DARKGuy,
21

W projekcie Visual Basic istnieje wsparcie usuwania „Nieużywanych referencji” (Projekt -> Referencje -> Nieużywane referencje). W języku C # nie ma takiej funkcji.

Jedynym sposobem na zrobienie tego w projekcie C # (bez innych narzędzi) jest usunięcie możliwych nieużywanych zestawów, skompilowanie projektu i sprawdzenie, czy podczas kompilacji wystąpią jakiekolwiek błędy. Jeśli nie wystąpią żadne błędy, usunąłeś nieużywany zespół. ( Zobacz mój post )

Jeśli chcesz wiedzieć, który projekt (zespół) zależy od innych zespołów, możesz użyć NDepend .

Jehof
źródło
2
W VS 2008/2010 dostępna jest opcja menu prawym przyciskiem myszy, aby usunąć lub usunąć i posortować zastosowania.
JohnB
11
@JohnB: Oczywiście masz rację, ale jego pytanie dotyczy odniesień (do zestawów), a nie użycia (przestrzeni nazw).
Jehof
VS2012: menu: Projekt-> właściwości-> Referencje-> Nieużywane referencje.
LosManos
21

W programie Visual Studio 2013/2015/2017 istnieje rozszerzenie, które robi dokładnie to, co chcesz: ResolveUR . W zasadzie działa to:

  • odniesienie zostało usunięte w projekcie
  • projekt jest kompilowany z msbuild
  • sprawdź błędy kompilacji
  • przywróć usunięte odniesienia, jeśli wystąpiły błędy kompilacji.
Claudiu Constantin
źródło
właśnie zainstalowałem go dla VS 2017 Community Edt. - jak dotąd działa dobrze.
Thomas
mówi, że wystąpił błąd kompilacji, ale nie ma błędu kompilacji podczas kompilacji, więc nie działa wersja vs2015
Raghavendra
Możesz utworzyć problem na stronie github: github.com/subatta/ResolveUR/issues
Claudiu Constantin
5
2,5 na 5 gwiazdek w Visual Studio Marketplace z 52 recenzji nieco mnie zniechęciło
ECH,
Wypróbowałem to w projekcie MVC i proponuje usunięcie kilku istotnych zależności, takich jak System.Web.Helpers, więc niechętnie pozwalam temu odejść.
Jahaziel
18

Wszystko czego potrzebujesz to kamień i gołe kostki, a następnie możesz to zrobić jak jaskiniowiec.

  1. Usuń nieużywane przestrzenie nazw (dla każdej klasy)
  2. Uruchom kompilację debugowania
  3. Skopiuj plik wykonywalny i pozostałe odwołania do przestrzeni nazw do nowej lokalizacji
  4. Uruchom plik wykonywalny
  5. Wystąpi błąd brakującej biblioteki DLL odniesienia
  6. Skopiuj wymaganą bibliotekę DLL z folderu debugowania
  7. Powtórz 4-6
  8. Gu Gu Ga Ga?
  9. Rzuć kamień

Możesz także polegać na swoich narzędziach do budowania, aby poinformować Cię, które odwołanie jest nadal wymagane. To era VS 2017, jaskiniowiec wciąż przetrwał.

Eark
źródło
Haha, cóż, nie ma tu nic złego z odrobiną humoru. Rzeczywiste podejście kamieniarza, wygląda na to, że bez wydawania wersji Enterprise to, co mamy teraz.
Nicholas Petersen
16

Dla każdego, kto tu przyjeżdża i szuka programu Visual Studio 2012 :

Pobierz i zainstaluj Reference Assistant for Visual Studio 11

Później możesz zrobić:

wprowadź opis zdjęcia tutaj

Habib
źródło
1
Reference Assistant for Visual Studio 11 wydaje się być niedokładny, pokazał mi kilka nieużywanych referencji, o których istnieniu wiedziałem, że są używane (instalowane przez Nuget).
Bill Yang,
1
Nie działa z projektem MVC. Usuwa niezbędne biblioteki DLL jako .Helpers i .WebPage
User.Anonymous
Tak, to wróciło, by ugryźć mnie w tyłek za pomocą programu WPF C #.
Charles Clayton
Brak opcji w VS2017
Nathan
1
Nie istnieje również w VS2019
Vin Shahrdar,
15

W wersji Visual Studio 2017 i 2015 możesz to zrobić za pomocą funkcji Code Code , ale ta funkcja jest dostępna tylko w wersji Enterprise Edition , a nie w wersji Community lub Professional .

Kliknij prawym przyciskiem myszy węzeł projektu w eksploratorze rozwiązań i wybierz „Pokaż na mapie kodów”. Spowoduje to wyświetlenie pliku .dll jako pojedynczego węzła na pustym wykresie. Kliknij prawym przyciskiem myszy ten węzeł na mapie kodów i wybierz „Pokaż zespoły z tymi referencjami”. Spowoduje to dodanie dodatkowego węzła o nazwie „Zewnętrzne”, który można rozwinąć, aby wyświetlać tylko te zespoły, do których istnieją odwołania.

wprowadź opis zdjęcia tutaj

Glenn Slayden
źródło
1
Jeśli masz wersję Enterprise i nie widzisz tej opcji w menu kontekstowym, musisz zainstalować funkcję „Mapa kodów” z instalatora VS w panelu Pojedyncze komponenty.
StingyJack
To jest dobre, dziękuję @Glenn. Chcę tylko powiedzieć, że miałem Micosoft.Office.Interop.Excel w użyciu i nie było go na liście innych referencji, więc nadal muszę być nieco ostrożny.
Emil Filip
14

W Visual Studio 2013 to rozszerzenie działa: ResolveUR

Ogólna awaria
źródło
15
@abarisone Twoja ogólna odpowiedź „nie używaj linku jako odpowiedzi” naprawdę powinna być używana tylko PO tym, jak faktycznie WYGLĄDAŁEŚ na odpowiedź. Link jest jedyną rzeczą, która jest istotna dla tej odpowiedzi. Jest to link do wtyczki VS, więc nie ma nic więcej do uwzględnienia.
Charles Boyung,
Zgadzam się z Charlesem. To wygląda na nadużycie moderacji przez @abarisone. Ta odpowiedź naprawdę pomogła mi zaoszczędzić trochę czasu i nienawidziłbym jej, gdyby jakiekolwiek mody nadużyły swoich uprawnień do jej usunięcia.
Zun,
@Zun Po pierwsze, nigdy nie byłem moderatorem ani nie twierdziłem, że nim jestem. Miałem zamiar poprosić o więcej informacji na temat rozszerzenia. Moim zdaniem mogło to być powierzchowne, ale na pewno nie zamierzałem popełnić nadużycia.
abarisone,
12

Niektórzy sugerowali użycie niesamowitego narzędzia - Reference Assistant for Visual Studio . Problem polega na tym, że VS2012 to najnowszy obsługiwany program Visual Studio. Ale jest sposób, aby sprawić, by działał również w VS2013;)

A oto jak:

1) Pobierz Lardite.RefAssistant.11.0.vsix

2) Zmień rozszerzenie na zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Rozpakuj i otwórz extension.vsixmanifestplik w edytorze tekstu

4) Znajdź wszystkie wystąpienia InstallationTarget Version="[11.0,12.0)"i zastąp je InstallationTarget Version="[11.0,12.0]"(zwróć uwagę na wspornik zamykający)

5) Zapisz plik i skompresuj wszystkie pliki, aby znajdowały się na głównym poziomie zip

6) Zmień rozszerzenie nowego zipnavsix

7) Zainstaluj i ciesz się :)

Przetestowałem to z VS2013, dzięki za źródło dla samouczka

EDYCJA Dodaj do obsługi VS 2015 Community Edition

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

Znaczenie nawiasów

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.
VladL
źródło
1
To działa dobrze! Wydaje się wtedy prostą literówką, którą autor mógł naprawić wiele lat temu - ale wydaje się, że zniknął, przynajmniej strona internetowa ...
wexman
To nie literówka, ale najlepiej obsługiwana wersja VS :). Deweloper powinien testować swój dodatek przy każdej nowej wersji VS i zwiększać liczbę, ale z jakiegoś powodu tego nie zrobił.
VladL
Pamiętaj, aby zatrzymać „kopiowanie i wklejanie” rzeczy. :)
Rikki,
@RikkiRockett Czy zwracasz się do mnie? W swojej odpowiedzi podłączyłem źródło. A co dokładnie masz na myśli?
VladL
2
Nie, stary. Żartowałem. Tylko mówię do faceta, który umieścił „)” zamiast „]”, który zmusił nas wszystkich do wykonania instrukcji. :) Dobra robota, po prostu zrobiłem to, co powiedziałeś i wszystko w porządku! Właśnie uratowałeś mi dzień zmagania się z tym. (y)
Rikki,
7

Możesz użyć rozszerzenia Reference Assistant z galerii rozszerzeń Visual Studio.

Używany i działa w Visual Studio 2010.

eka808
źródło
2
Musisz być ostrożny przy projektach internetowych. Zgłasza biblioteki DLL, które są używane jako „nieużywane”.
Miro J.,
Zgadzam się z Miro. Próbowałem użyć tego w moim projekcie internetowym i wybrałem dwa tuziny odniesień, które były wymagane do uruchomienia mojej aplikacji internetowej (System.Web. *, Ninject. *, EntityFramework, żeby wymienić tylko kilka).
Denis M. Kitchen
Nie działa z projektem MVC. Usuwa niezbędne biblioteki DLL jako .Helpers i .WebPage
User.Anonymous
1

Korzystając z DevExpress, postępuję zgodnie z następującymi instrukcjami:

  1. W VS przejdź do DevExpress - Editor - Code Cleanup. W obszarze Reguły zaznacz opcję „Usuń nieużywane odwołania do przestrzeni nazw”. Kliknij OK.
  2. Kliknij rozwiązanie prawym przyciskiem myszy i wybierz „Czyszczenie kodu”. Czyszczenie trwa kilka minut i kończy się.
  3. Zbuduj swoją aplikację
Rozwiązania IndieTech
źródło
-3

Poniższa metoda nie zależy od żadnych dodatków i nie jest bardzo bolesna.

Przejdź przez każdy ze swoich plików źródłowych i

  1. Wybierz wszystko (Ctrl-A)
  2. Przełącz rozwinięcie konturu (Ctrl-M, M). Spowoduje to zmniejszenie pliku do dwóch linii.
  3. Kliknij przestrzeń nazw „+”. Spowoduje to wyświetlenie każdej klasy pliku jako pojedynczej linii. Zeskanuj liczbę referencji każdej klasy, szukając klas, do których nie ma odniesienia.
  4. Kliknij każdą z klas „+”. Spowoduje to wyświetlenie każdej funkcji klasy jako pojedynczej linii. Skanuj liczbę referencji każdej funkcji, szukając funkcji, do których nie ma odniesienia.

Skanowanie każdego pliku w poszukiwaniu „0 referencji” zajmuje tylko sekundę.

Skanowanie całego projektu zajmuje tylko kilka minut.

NoBrassRing
źródło
-10

W VB2008 działa to w ten sposób:

Project>Add References

Następnie kliknij kartę Ostatnie, na której znajduje się lista ostatnio używanych referencji. Znajdź ten, którego nie chcesz i usuń go. Następnie zamykasz bez dodawania czegokolwiek.

współtwórca kodu
źródło
1
Nie sprawdza to, czy odwołanie jest w użyciu
Xavier Poinas,
-12

Aby usunąć odwołanie w Visual C # W Eksploratorze rozwiązań, otwórz węzeł Referencje w węźle projektu. Kliknij odnośnik prawym przyciskiem myszy i kliknij Usuń.

Halit Can
źródło
3
Wydaje się, że nie ogranicza się to do nieużywanego lub automatycznego działania.
Nathan Tuggy
to nie jest automatyczne działanie.
Amir
dobrze wypróbowana, ale zła odpowiedź, nie automatyczna, jak powiedziano wcześniej