Видалення всіх невикористаних посилань з проекту в проектах Visual Studio


263

Мене просто цікавило, чи можливо в різних версіях Visual Studio автоматично видаляти всі посилання з проекту, які ніколи не використовувалися?

У своїй відповіді вкажіть, будь ласка, до якої версії VS застосовується рішення.


4
Як правило, цікаво, чи видалення цих DLL призводить до помітного поліпшення часу збирання чи чогось іншого? (Звичайно, окрім усунення зайвих залежностей)
monish001

3
є якесь подібне безкоштовне розширення для VS2015?
Джордж Бірбіліс

1
Проект VB.Net існує з VS 2005 року, але він ніколи не був реалізований для проектів C # msdn.microsoft.com/en-us/library/7sfxafba
Slai

4
Ви можете проголосувати, щоб ця функція була включена до складу VS (як і належить).
Майк Лоурі

2
@ monish001 - кожна збірка та актив збільшує слід розгортання і інша річ керувати / підтримувати або бути потенційним джерелом помилок.
StingyJack

Відповіді:


55

Якщо у вас встановлений Resharper (плагін), ви можете отримати доступ до функції, яка дозволяє аналізувати використані посилання за допомогою Провідника рішень> (клацніть правою кнопкою миші) Посилання> Оптимізувати посилання ...

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

Ця функція неправильно обробляє:

  • Залежність вводиться вузлів
  • Динамічно завантажені збірки (Assembly.LoadFile)
  • Збори власного коду, завантажені через інтероп
  • Елементи керування ActiveX (COM interop)
  • Інші творчі способи завантаження збірок

введіть тут опис зображення


1
Ваше останнє твердження "Однак це не є ідеальним, будь-які збори, які залежать від посилань на збірки у вашому поточному проекті, все ще позначаються як невикористані". насправді не проблема. Збірка знає копіювати посилання ваших посилань. Дивіться цю відповідь: stackoverflow.com/a/2290139/26262
Ed Greaves

Хоча це є життєздатним способом зробити це, "в різних версіях Visual Studio" для мене означає не щось інше, а вже "всередині"
Марк Шультхейс

28

Розширення Resharper зробить це за вас.

Це розширення підтримує Visual Studio 2005 по 2017 рік.

Хоча компілятор не буде включати невикористані збірки, стороннє використання операторів та посилань уповільнює Visual Studio та Intellisense, оскільки є більше коду, який інструменти повинні враховувати.


12
що знайшли багато невикористаних посилань у своєму проекті - але купу їх там, де насправді використовують… Тож я не довіряю Resharper з посиланнями
Offler

5
Resharper споживає тонни пам’яті у великих проектах, коли є багато посилань, які врешті-решт виходять з ладу VS
Cemre

2
Видання @eraj VS Express не підтримують розширення. Отримайте безкоштовну версію спільноти, яка підтримує розширення типу ReSharper.
codemonkeh

4
Піт, будь-який автоматизований інструмент матиме можливість перевиконання. Особливо, в епоху DI та PCL залежності, які, здається, не використовуються, можливо, знадобляться, але в цьому навряд чи є вина. Замість того, щоб робити знімок екрана, ви повинні використовувати програмне забезпечення для управління версіями. Сучасна система на зразок Git або Hg дозволяє вам часто перевіряти місцево, так що ви ніколи не втрачаєте роботу.
Матьєсон

2
наскільки я можу сказати сказати Resharper показує невикористані простори імен, а не збірки посилань, саме так, на мою думку, означає "невикористані посилання з проекту". Я також хотів би знайти останнє
Sonic Soul

28

Ви можете спробувати безкоштовне розширення VS2010: Reference Assistant від Lardite group. Це прекрасно працює для мене. Цей інструмент допомагає знайти невикористані посилання та дозволяє вибрати, які посилання слід видалити.


3
Не працює з проектом MVC. Це видаляє необхідну DLL як .Helpers та .WebPage
User.Anonymous

3
@Amit розширення має робочу версію для VS2012 зараз
Philipp M

Це спрацює, якщо дотримуватися простої хитрості: devio.wordpress.com/2014/12/03/…
ravi punjwani

5
а для VS2019?
DARKGuy

21

У проекті Visual Basic є підтримка для видалення "Невикористаних посилань" (Project -> References -> Unused References). У C # такої функції немає.

Єдиний спосіб зробити це у проекті C # (без інших інструментів) - це видалити можливі невикористані збірки, скомпілювати проект та перевірити, чи виникають помилки під час компіляції. Якщо жодних помилок не виникає, ви видалили невикористану збірку. ( Дивіться моє повідомлення )

Якщо ви хочете знати, який проект (збірка) залежить від інших збірок, ви можете використовувати NDepend .


2
У VS 2008/2010 є опція меню правою кнопкою миші для видалення або видалення та сортування впорядкування.
JohnB

11
@JohnB: Звичайно, ти маєш рацію, але його питання стосується посилань (на збірки), а не про використання (просторів імен).
Jehof

VS2012: меню: Проект-> Властивості-> Посилання-> Невикористані посилання.
ЛосМанос

20

Для Visual Studio 2013/2015/2017 є розширення, яке робить саме те, що ви хочете: ResolveUR . В основному це:

  • посилання видалено в проекті
  • проект складається з msbuild
  • перевірити наявність помилок в побудові
  • відновити видалені посилання, якщо були помилки в побудові.

щойно встановив його для VS 2017 Community Edt. - працює чудово поки що.
Томас

він говорить , що є помилка збірки , але немає ніякої помилки збірки , коли я побудувати так він не працює vs2015 Надсилання Edtion
Raghavendra

Ви можете створити проблему на сторінці github: github.com/subatta/ResolveUR/isissue
Константин

5
2,5 з 5 зірок на Visual Studio Marketplace із 52 відгуків трохи відклали мене
ECH

Спробував це на проекті MVC, і він пропонує усунути декілька життєво важливих залежностей, таких як System.Web.Helpers, тому я не хочу відпускати це самостійно.
Іозііл

18

Все, що вам потрібно, - це камінь і голі рукоятки, тоді ви можете це зробити, як печер.

  1. Видаліть невикористані простори імен (для кожного класу)
  2. Запустіть збірку налагодження
  3. Скопіюйте свої виконавчі та залишки посилань на простір імен на нове місце
  4. Запустіть виконуваний файл
  5. Відбудеться помилка DLL-посилання
  6. Скопіюйте потрібну DLL з папки налагодження
  7. Повторіть 4-6
  8. Гу Гу Га Га?
  9. Кинь свій камінь

Ви також можете розраховувати на свої інструменти побудови, щоб повідомити, які посилання ще потрібні. Це ера VS 2017, печерний чоловік все ще вижив.


Ха-ха, ну нічого поганого тут немає. Підхід Стоунмена справді виглядає як без зайвого Enterprise Edition, що ми маємо зараз.
Микола Петерсен

16

Для всіх, хто приходить сюди, шукаючи Visual studio 2012 :

Завантажте та встановіть довідковий помічник для Visual Studio 11

Пізніше ви можете зробити:

введіть тут опис зображення


1
Довідковий помічник для Visual Studio 11 здається неточним, він показав мені купу невикористаних посилань, які я знав, що фактично використовуються (встановлюються через Nuget).
Білл Ян

1
Не працює з проектом MVC. Він видаляє необхідні DLL як .Helpers та .WebPage
User.Anonymous

Так, це повернулося, щоб вкусити мене в дупу за допомогою програми WPF C #.
Чарльз Клейтон

Не варіант у VS2017
Натан

1
Не існує і у VS2019
Він

15

У версіях Visual Studio 2017 та 2015 ви можете це зробити за допомогою функції кодової карти , але ця функція доступна лише у версії Enterprise Edition , а не у спільноті чи у професійних версіях.

Клацніть правою кнопкою миші на вузлі проекту в провіднику рішень і виберіть "Показати на кодовій карті". Це покаже ваш .dll як єдиний вузол у порожньому графіку. Клацніть правою кнопкою миші на цьому вузлі в кодовій карті та виберіть "Показати збірки цієї посилання". Це додасть додатковий вузол під назвою "Зовнішні", який можна розширити, щоб відобразити лише ті збори, на які фактично посилаються.

введіть тут опис зображення


1
Якщо у вас є Enterprise Edition і ви не бачите цю опцію в контекстному меню, тоді вам потрібно встановити функцію «Кодова карта» з інсталятора VS на панелі «Індивідуальні компоненти».
StingyJack

Це хороший, Дякую @Glenn Я просто хочу сказати, що у мене був Micosoft.Office.Interop.Excel у використанні, і він не був вказаний серед інших посилань, тому все одно треба бути обережним.
Еміль Філіп

14

У Visual Studio 2013 це розширення працює: ResolveUR


15
@abarisone Ваша загальна відповідь "не використовуйте посилання як відповідь" дійсно повинна використовуватися лише ПІСЛЯ ви насправді ПОШУЄМО у відповідь. Посилання - це єдине, що відповідає цій відповіді. Це посилання на плагін VS, тому немає нічого іншого релевантного для включення.
Чарльз Боюн

Я згоден з Чарльзом. Це здається зловживанням модерацією з боку @abarisone. Ця відповідь справді допомогла мені заощадити деякий час, і я б ненавидів її, якби якісь модники зловживали своїми повноваженнями, щоб видалити її.
Зун

@Zun Перш за все, я ніколи взагалі не був модератором чи претендував на себе. Моя мета полягала у тому, щоб попросити більше інформації про розширення. Можливо, це було поверхневим моїм боком, але я, безумовно, не мав наміру вчинити зловживання.
абарізон

12

Деякі люди запропонували використовувати приголомшливий інструмент - Довідковий помічник для Visual Studio . Проблема полягає в тому, що VS2012 - це остання підтримувана Visual Studio. Але є спосіб змусити його працювати і в VS2013;)

А ось як:

1) Завантажте Lardite.RefAssistant.11.0.vsix

2) Змініть розширення на zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Розпакуйте та відкрийте extension.vsixmanifestфайл у текстовому редакторі

4) Знайдіть усі випадки виникнення InstallationTarget Version="[11.0,12.0)"та замініть їх InstallationTarget Version="[11.0,12.0]"(зверніть увагу на дужку закриття)

5) Збережіть файл і зафіксуйте всі файли, щоб вони знаходилися на рівні кореневого zip

6) Змініть розширення нового zipнаvsix

7) Встановіть і насолоджуйтесь :)

Я перевірив його на VS2013, дякую джерело для навчального посібника

EDIT Додати для підтримки VS 2015 Community Edition

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

Значення дужок

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

1
Це працює просто чудово! Схоже, це був простий друкарський помилок, який автор міг зафіксувати років тому - але він, схоже, зник, принаймні, на веб-сайті ...
wexman

Це не помилка друку, але найвищо підтримувана версія VS :). Розробник повинен перевірити свою надбудову з кожною новою версією VS та збільшити кількість, але чомусь вони цього не зробили.
ВладЛ

Не забудьте припинити "копіювати та вставляти" речі. :)
Рікі

@RikkiRockett Ви звертаєтесь до мене? Я пов’язав джерело у своїй відповіді. Або що саме ти маєш на увазі?
ВладЛ

2
Ні, людина. Я жартував. Просто сказати хлопцю, який поставив ")" замість "]", який змусив нас усіх пройти ваші вказівки. :) Хороша робота, хоча я просто зробив те, що ти сказав, і все добре! Ви просто врятували мені день боротьби з цим. (у)
Ріккі

7

Ви можете використовувати розширення Reference Assistant з галереї розширень Visual Studio.

Використовується та працює для Visual Studio 2010.


2
Вам потрібно бути обережними з веб-проектами. Він повідомляє про DLL-файли, які використовуються як "невикористані".
Miro J.

Я згоден з Міро. Я спробував використати це разом зі своїм веб-проектом, і він вибрав два десятки посилань, які потрібні для запуску мого веб-додатку (System.Web. *, Ninject. *, EntityFramework, лише декілька назв).
Денис М. Кухня

Не працює з проектом MVC. Це видаляє необхідні DLL як .Helpers та .WebPage
User.Anonymous

1

Використовуючи DevExpress, я дотримуюся цих інструкцій:

  1. У VS перейдіть до DevExpress - Editor - Очищення коду. У розділі Правила встановіть прапорець "Видалити невикористані посилання на простір імен". Натисніть кнопку ОК.
  2. Клацніть на рішенні правою кнопкою миші та виберіть "Очищення коду". Прибирання триває кілька хвилин і закінчується.
  3. Створіть свою програму


-3

Наступний метод не залежить від будь-яких «надбудов» і не дуже болісний.

Перегляньте кожен ваш вихідний файл і

  1. Вибрати все (Ctrl-A)
  2. Увімкніть розширення контуру (Ctrl-M, M). Це зменшить файл до двох рядків.
  3. Клацніть на «+» у просторі імен. Це покаже кожен клас файлів як один рядок. Скануйте кількість посилань кожного класу, шукаючи нерозподілені класи.
  4. Клацніть на кожному з класів '' + '. Це покаже кожну з функцій класу як один рядок. Скануйте кількість посилань кожної функції, шукаючи невідредаговані функції.

Сканування кожного файлу, який шукає "0 посилання", займає лише секунду.

Сканування всього проекту займає лише пару хвилин.


-11

У VB2008 це працює так:

Project>Add References

Потім натисніть на вкладку Останні, де ви можете побачити список посилань, які нещодавно використовували. Знайдіть того, кого не хочете, і видаліть його. Потім закриваєте, нічого не додаючи.


1
Це не перевіряє, чи використовується посилання
Xavier Poinas,

-12

Щоб видалити посилання в Visual C # In Explorer Solution Explorer, відкрийте вузол References під проектним вузлом. Клацніть правою кнопкою миші посилання та натисніть Видалити.


3
Здається, це не обмежено лише невикористаним або автоматичним в роботі.
Натан Туггі

це не автоматична робота.
Амір

добре спробував, але погана відповідь, не автоматичний, як було сказано раніше
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.