Удаление всех неиспользуемых ссылок из проекта в проектах Visual Studio


263

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

В своем ответе укажите, к какой версии VS относится решение.


4
Вообще интересно, приводит ли удаление этих DLL к заметному улучшению времени сборки или что-то еще? (Конечно, кроме удаления избыточных зависимостей)
monish001

3
есть ли подобное бесплатное расширение для VS2015?
Джордж Бирбилис

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

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

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

Ответы:


55

Если у вас установлен Resharper (плагин), вы можете получить доступ к функции, которая позволяет анализировать использованные ссылки через Solution Explorer> (щелчок правой кнопкой мыши) References> Optimize References ...

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

Эта функция неправильно обрабатывает:

  • Зависимость вводимых сборок
  • Динамически загружаемые сборки (Assembly.LoadFile)
  • Собранные сборки кода, загруженные через взаимодействие
  • Элементы управления ActiveX (COM-взаимодействие)
  • Другие креативные способы загрузки сборок

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


1
Ваше последнее утверждение: «Однако оно не идеально, любые сборки, которые зависят от ссылочных сборок в текущем проекте, все еще помечены как неиспользуемые». это на самом деле не проблема. Сборка знает, чтобы скопировать ссылки из ваших ссылок. Смотрите этот ответ: stackoverflow.com/a/2290139/26262
Эд Гривз

Хотя это жизнеспособный способ сделать это, «для меня в различных версиях Visual Studio» означает не что-то другое, а уже «внутри»
Марк Шультхайс,

28

Расширение Resharper сделает это за вас.

Это расширение поддерживает Visual Studio 2005 по 2017 год.

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


12
что нашлось много неиспользованных ссылок в нашем проекте - но куча из них действительно используется ... Так что я не доверяю Resharper со ссылками
Offler

5
Resharper потребляет тонны памяти в больших проектах, когда есть много ссылок, которые в конечном итоге
приводят к сбою

2
Редакции @eraj VS Express не поддерживают расширения, получите бесплатную версию Community, которая поддерживает такие расширения, как ReSharper.
codemonkeh

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

2
насколько я могу судить, Resharper показывает неиспользуемые пространства имен, а не ссылки на сборки, что, как мне кажется, означает вопрос «неиспользуемые ссылки из проекта». Я бы тоже хотел найти последнее
Sonic Soul

28

Вы можете попробовать бесплатное расширение VS2010: Reference Assistant от группы Lardite. Это прекрасно работает для меня. Этот инструмент помогает найти неиспользуемые ссылки и позволяет выбрать, какие ссылки следует удалить.


3
Не работает с проектом MVC. Он удаляет необходимые DLL, как .Helpers и .WebPage
User.Anonymous

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

Это работы , если вы будете следовать простой трюк: devio.wordpress.com/2014/12/03/...
Рави punjwani

5
а для VS2019?
DARKGuy

21

В проекте Visual Basic есть поддержка удаления «Неиспользуемые ссылки» (Проект -> Ссылки -> Неиспользованные ссылки). В C # такой функции нет.

Единственный способ сделать это в проекте C # (без других инструментов) - удалить возможные неиспользуемые сборки, скомпилировать проект и проверить, не возникли ли какие-либо ошибки во время компиляции. Если ошибок нет, вы удалили неиспользуемую сборку. ( См. Мой пост )

Если вы хотите узнать, какой проект (сборка) зависит от других сборок, вы можете использовать NDepend .


2
В VS 2008/2010 есть опция меню, вызываемая правой кнопкой мыши, для удаления или удаления и сортировки.
JohnB

11
@JohnB: Конечно, вы правы, но его вопрос касается ссылок (на сборки), а не использования (пространств имен).
Джехоф

VS2012: меню: Проект-> Свойства-> Ссылки-> Неиспользуемые ссылки.
LosManos

20

Для Visual Studio 2013/2015/2017 есть расширение, которое делает именно то, что вы хотите: ResolveUR . Что это в основном делает:

  • ссылка удалена в проекте
  • проект компилируется с помощью msbuild
  • проверить на ошибки сборки
  • восстановить удаленные ссылки, если были ошибки сборки.

только что установил его для VS 2017 Community Edt. - отлично работает до сих пор.
Томас

он говорит, что есть ошибки сборки, но нет ошибки сборки, когда я собираюсь, поэтому он не работает vs2015 коммюнике
Raghavendra

Вы можете создать проблему на странице github: github.com/subatta/ResolveUR/issues
Клавдиу Константин

5
2.5 из 5 звезд на Visual Studio Marketplace из 52 обзоров немного меня оттолкнули
ECH

Попробовал его на проекте MVC, и он предлагает удалить несколько жизненно важных зависимостей, таких как System.Web.Helpers, поэтому я не хочу отпускать его самостоятельно.
Иозиил

19

Все, что вам нужно, это камень и голая рулька, тогда вы можете делать это, как пещерный человек.

  1. Удалить неиспользуемые пространства имен (для каждого класса)
  2. Запустите Debug build
  3. Скопируйте исполняемый файл и оставшиеся ссылки на пространство имен на новое место
  4. Запустите исполняемый файл
  5. Ошибка DLL отсутствующей ссылки
  6. Скопируйте необходимую DLL из папки Debug
  7. Повторите 4-6
  8. Гу гу га га?
  9. Бросай свой камень

Вы также можете положиться на свои инструменты сборки, чтобы сообщить, какая ссылка все еще требуется. Это эра VS 2017 года, пещерный человек все еще выжил.


Ха-ха, ничего страшного с юмором здесь нет. Подход Stoneman, похоже, без затратной версии Enterprise, это то, что мы имеем прямо сейчас.
Николай Петерсен

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 вы можете сделать это с помощью функции Code Code , но эта функция доступна только в версии Enterprise Edition , но не в версии Community или Professional .

Щелкните правой кнопкой мыши узел проекта в обозревателе решений и выберите «Показать на карте кода». Это отобразит ваш .dll в виде одного узла на пустом графике. Щелкните правой кнопкой мыши по этому узлу на карте кода и выберите «Показать сборки в этой ссылке». Это добавит дополнительный узел с именем «Внешние элементы», который можно развернуть, чтобы показать только те сборки, на которые действительно есть ссылки.

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


1
Если у вас есть редакция Enterprise, и вы не видите эту опцию в контекстном меню, вам необходимо установить функцию «Карта кода» из установщика VS на панели «Отдельные компоненты».
StingyJack

Это хороший, спасибо @Glenn. Я просто хочу сказать, что у меня был Micosoft.Office.Interop.Excel в использовании, и он не был указан среди других ссылок, поэтому все же нужно быть немного осторожнее.
Эмиль Филип

14

В Visual Studio 2013 работает это расширение: ResolveUR


15
@abarisone Ваш общий ответ "не использовать ссылку в качестве ответа" действительно должен использоваться только ПОСЛЕ того, как вы НАСТОЯЩИМ НА СМОТРЕТЬ ответ. Ссылка является единственной вещью, которая имеет отношение к этому ответу. Это ссылка на плагин VS, так что больше ничего не нужно включать.
Чарльз Боюнг

Я согласен с Чарльзом. Это похоже на злоупотребление модерацией со стороны @abarisone. Этот ответ действительно помог мне сэкономить время, и я бы ненавидел его, если бы какие-либо моды использовали свои полномочия для его удаления.
Zun

@Zun Во-первых, я никогда не был модератором вообще и не претендовал на это. Мое намерение состояло в том, чтобы попросить больше информации о расширении. Возможно, это было поверхностно с моей стороны, но я, конечно, не хотел совершать оскорбления.
abarisone

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) Сохраните файл и заархивируйте все файлы, чтобы они были на уровне корневого почтового индекса

6) Измените расширение нового zipнаvsix

7) Установите и наслаждайтесь :)

Я проверил его с VS2013, спасибо источник за учебник

РЕДАКТИРОВАТЬ Добавить в поддержку 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, которые используются как «неиспользованные».
Миро Дж.

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

Не работает с проектом MVC. Он удаляет важные DLL, как .Helpers и .WebPage
User.Anonymous

1

Используя DevExpress, я следую этим инструкциям:

  1. В VS перейдите в DevExpress - Редактор - Очистка кода. В разделе «Правила» установите флажок «Удалить неиспользуемые ссылки на пространство имен». Нажмите ОК.
  2. Щелкните правой кнопкой мыши решение и выберите «Очистка кода». Очистка длится несколько минут и заканчивается.
  3. Создайте свое приложение


-3

Следующий метод не зависит от каких-либо надстроек и не очень болезненный.

Пройдите через каждый из ваших исходных файлов и

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

Сканирование каждого файла в поисках «0 ссылок» занимает всего секунду.

Сканирование всего проекта занимает всего пару минут.


-11

В VB2008 это работает так:

Project>Add References

Затем нажмите на вкладку «Последние», где вы можете увидеть список использованных ссылок. Найдите тот, который вы не хотите, и удалите его. Затем вы закрываете, ничего не добавляя.


1
Это не проверяет, используется ли ссылка
Xavier Poinas

-12

Чтобы удалить ссылку в Visual C # В обозревателе решений откройте узел «Ссылки» под узлом проекта. Щелкните правой кнопкой мыши ссылку и выберите Удалить.


3
Похоже, что это не ограничивается только неиспользованным или автоматическим в работе.
Натан Тагги

это не автоматическая операция.
Амир

хорошо пробовал, но плохой ответ, а не автоматический, как было сказано ранее
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.