Удалить неиспользуемые ссылки (! = Using)

Как мне найти и удалить неиспользуемые ссылки в моих проектах?

Я знаю, что вы можете легко удалить операторы using в vs 2008, но это не удаляет фактическую ссылку в ваших проектах. Указанная dll по-прежнему будет скопирована в ваш пакет bin / setup.


person Boris Callens    schedule 17.09.2008    source источник
comment
благодаря. К сожалению, ответа я не ожидал ...   -  person Boris Callens    schedule 23.07.2009
comment
возможный дубликат инструментов для поиска неиспользуемых ссылок   -  person David Schmitt    schedule 12.11.2010


Ответы (11)


* Примечание: см. http://www.jetbrains.net/devnet/message/5244658. для другой версии этого ответа.

Читая сообщения, похоже, есть некоторая путаница относительно исходного вопроса. Позвольте мне нанести удар.

Исходный пост действительно задает вопрос: «Как мне определить и удалить ссылки из одного проекта Visual Studio на другие проекты / сборки, которые не используются?» Плакат хочет, чтобы сборки больше не отображались как часть выходных данных сборки.

В этом случае ReSharper может помочь вам идентифицировать их, но вы должны удалить их самостоятельно.

Для этого откройте «Ссылки в браузере решений», щелкните правой кнопкой мыши каждую сборку, на которую указывает ссылка, и выберите «Найти зависимый код». Видеть:

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

Вы получите либо:

  1. Список зависимостей от этой ссылки в окне браузера или

  2. Диалоговое окно с сообщением «Код, зависящий от модуля XXXXXXX, не найден».

Если вы получили второй результат, вы можете затем щелкнуть правой кнопкой мыши ссылку, выбрать «Удалить» и удалить ее из своего проекта.

Хотя вам нужно делать это «вручную», то есть по одной ссылке за раз, она выполнит свою работу. Если кто-то каким-то образом автоматизировал это, мне интересно услышать, как это было сделано.

Вы можете в значительной степени игнорировать те, которые есть в .Net Framework, поскольку они обычно не копируются в выходные данные вашей сборки (обычно - хотя и не обязательно для приложений Silverlight).

Некоторые сообщения, похоже, отвечают на вопрос: «Как удалить из файла исходного кода предложения using (C #), которые не нужны для разрешения каких-либо ссылок в этом файле».

В этом случае ReSharper действительно помогает несколькими способами:

  1. Определяет неиспользуемые предложения using во время обнаружения ошибок «на лету». Они отображаются как предупреждения проверки кода - код в файле будет выделен серым цветом (по умолчанию), и ReSharper предоставит подсказку для его удаления:

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

  2. Позволяет автоматически удалять их в процессе очистки кода:

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

Наконец, поймите, что ReSharper выполняет статический анализ кода вашего решения. Таким образом, если у вас есть динамическая ссылка на сборку - скажем, через отражение или сборку, которая динамически загружается во время выполнения и доступна через интерфейс, - она ​​не подхватится. Ничто не заменит понимание вашего кода. base и зависимостей проекта, когда вы работаете над своим проектом. Я считаю, что функции ReSharper очень полезны.

person jlo    schedule 05.09.2009
comment
Хороший развернутый ответ. Что странно, хотя вы знаете, что я не имею в виду операторы using (эта очистка является стандартной в VS, не понимаю, почему R # заново изобрел это), вы сначала отвечаете на этот вопрос. Не могли бы вы поменять их местами? - person Boris Callens; 07.09.2009
comment
Сделаю. Функция ReSharper предшествует реализации Visual Studio. Остается так, как это достигается за счет их функции автозамены - смарт-теги отключаются, когда у вас есть ReSharper. - person jlo; 29.09.2009
comment
Спустя ~ 4 года ReSharper 6.1 получил эту функцию напрямую! - person Julien Roncaglia; 06.02.2012
comment
Не уверен, что вы имеете в виду - ReSharper имеет эту функцию уже много лет. - person jlo; 07.02.2012
comment
ВНИМАНИЕ: если вы используете какое-либо отражение для динамической загрузки из сборок, это будет плохо. Вы будете использовать ссылку, чтобы перенести сборку с собой на место хранения / производства, но не будет кода, ссылающегося на нее напрямую. ИСПОЛЬЗУЙТЕ ОСТОРОЖНО! - person Casper Leon Nielsen; 06.02.2013
comment
Один из способов выяснить все ссылки на DLL, включая динамические, - это проверить зависимость связанного пакета NuGet (при условии, что он есть). Например, NHibernate DLL не ссылается на Iesi.Collections, но может использовать его динамически, поэтому он указан как зависимость от NuGet: nuget.org/packages/NHibernate - person Răzvan Flavius Panda; 21.11.2014


Удаление неиспользуемых ссылок - это функция, которую Visual Studio 2008 уже поддерживает. К сожалению, только для проектов VB .NET.

Я сделал предложение в Microsoft Connect, чтобы получить эту функцию и для проектов C #:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=510326

Если вам тоже нравится эта функция, вы можете проголосовать за мое предложение.

person jbe    schedule 13.11.2009

Попробуйте это: Помощник по справочной информации

Резюме

Помощник по ссылкам помогает удалить неиспользуемые ссылки из проектов C #, F #, VB.NET или VC ++ / CLI в Visual Studio 2010.

person Leniel Maccaferri    schedule 06.02.2012
comment
может быть вы знаете подобное расширение для vs 2012? - person isxaker; 14.03.2014
comment
@isxaker Теперь это встроенная функция resharper. - person itslittlejohn; 07.07.2015

ReSharper 6.1 будет включать следующие функции:

  • Оптимизация ссылок: проанализируйте ссылки на сборки и их использование в коде, получите список повторяющихся ссылок и удалите их.

  • Удалить неиспользуемые ссылки: быстрый рефакторинг для удаления избыточных ссылок на сборки.

  • Безопасное удаление ссылок на сборки: удаляет ссылки на сборки, если все они избыточны, в противном случае предотвращает использование и может удалить только избыточные ссылки на сборки из выбранного списка.

person Kirill Skrygan    schedule 15.11.2011

ReSharper сделает это за вас (и многое другое!)

person Chris Canal    schedule 17.09.2008
comment
Удалит ли Resharper ссылку на DLL в папке "Ссылки"? Я не думаю, что это так? - person tobinharris; 19.01.2009
comment
Я не думаю, что это будет ... Я думаю, это просто дергает оператор using для пространства имен, на которое вы не ссылаетесь. FWIW - Coderush предлагает ту же функциональность и многое другое! :) - person Samurai Ken; 06.09.2009
comment
Спустя ~ 4 года ReSharper 6.1 получил эту функцию! - person Julien Roncaglia; 06.02.2012

Я сделал это без расширения в VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, он показывает используемые сборки и вручную удаляет неиспользуемые ссылки.

person mes    schedule 28.10.2012
comment
Я не рекомендую это для более крупного проекта. Мне было очень трудно понять, что использовалось, а что нет. Однако я тоже страдаю дальтонизмом, так что это, вероятно, повлияло на полезность этого для меня. - person DubiousPusher; 07.01.2015

У меня есть бесплатный ответ, который работает в любой версии Visual Studio и любой версии Framework. Он не удаляет неиспользуемые ссылки, но идентифицирует их.

Вы можете использовать Telerik JustDecompile для DLL вашего проекта. Просто откройте dll в JustDecompile и перейдите в References, чтобы увидеть, что на самом деле используется в скомпилированной dll.

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

person toddmo    schedule 26.08.2015
comment
Думаю, это отличное решение! Вы пишете плагины VS? :) У ILSpy есть плагин, и я собираюсь посмотреть, можно ли его как-нибудь легко полуавтоматизировать ... - person Steven Coco; 23.04.2019
comment
@StevenCoco Я давно этого не делал, но API-интерфейс IDE довольно прост с множеством хороших примеров в Интернете. Удачи! Сообщите нам о своем проекте, если он у вас получился! - person toddmo; 23.04.2019

Учитывая, что VisualStudio (или это msbuild?) Обнаруживает неиспользуемые ссылки и не включает их в выходной файл, вы можете написать сценарий, который анализирует ссылки из csproj и сравнивает это со ссылочными сборками, обнаруженными путем отражения на выход проекта.

Если вы мотивированы ...

person Benjol    schedule 23.10.2008
comment
Это не всегда правильно. Например, если у вас есть класс Foo, производный от Bar, и у вас есть статический член Blah в Bar, и вы называете его Foo.Blah, тогда у вас должна быть сборка Foo в ссылках для компилятора, но она не будет сгенерирована в вывод, потому что статический член находится в Bar. Есть еще несколько подобных случаев. - person Ilya Ryzhenkov; 05.09.2009
comment
Да, я заметил некоторые «дыры» в моем сценарии, но так и не понял, почему. Спасибо за информацию. - person Benjol; 07.09.2009

Я думаю, что они скопированы в bin \, потому что в проекте, который удалил ссылку, есть ссылка на другой проект, который имеет такую ​​же ссылку ...

person hdmq    schedule 08.12.2014

Если вы знаете, какие ссылки не используются, вы можете удалить их вручную.
В обозревателе решений щелкните правой кнопкой мыши ссылку в узле Ссылки и выберите команду Удалить.

person fat    schedule 18.12.2015