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


100

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

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


Спасибо. К сожалению, ответа я не ожидал ...
— Boris Callens

Ответы:


55

* Примечание: см. 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 выполняет статический анализ кода вашего решения. Итак, если у вас есть динамическая ссылка на сборку - скажем, через отражение или сборку, которая динамически загружается во время выполнения и доступна через интерфейс, - она ​​ее не заберет. Ничто не заменит понимание вашей кодовой базы и зависимостей проекта во время работы над своим проектом. Я считаю, что функции ReSharper очень полезны.


Хороший развернутый ответ. Что странно, хотя вы знаете, что я не имею в виду операторы using (эта очистка является стандартной в VS, не понимаю, почему R # заново изобрел это), вы сначала отвечаете на этот вопрос. Не могли бы вы поменять их местами?
— Борис Калленс,

Сделаю. Функция ReSharper предшествует реализации Visual Studio. Остается так, как это достигается за счет их функции «автокоррекции» - смарт-теги отключаются, когда у вас есть ReSharper.
— jlo

1
Спустя примерно 4 года ReSharper 6.1 получил эту функцию напрямую!
— Жюльен Ронкалья

Не уверен, что вы имеете в виду - ReSharper использует эту функцию уже много лет.
— jlo 06

8
ВНИМАНИЕ: если вы используете какое-либо отражение для динамической загрузки из сборок, это будет плохо. Вы будете использовать «ссылку», чтобы перенести сборку с собой в бункер / производственную площадку, но не будет кода, ссылающегося на нее напрямую. ИСПОЛЬЗУЙТЕ ОСТОРОЖНО!
— Каспер Леон Нильсен

12

вы можете использовать ' Удалить неиспользуемые ссылки расширение », которое я написал:

http://visualstudiogallery.msdn.microsoft.com/9811e528-cfa8-4fe7-9dd1-4021978b5097


это расширение не опубликовано
— Stombeur

1
Мне это сначала нравится! Но затем при дальнейшем тестировании он удалил необходимые мне ссылки. Более подробная информация об ошибке
— Rhyous

7

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

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

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

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


5

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

Резюме

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


1
может быть вы знаете подобное расширение для vs 2012?
— isxaker

@isxaker Теперь это встроенная функция
— resharper

4

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

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

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

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


4

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


Удалит ли Resharper ссылку на DLL в папке «Ссылки»? Я не думаю, что это так?
— tobinharris

1
Я не думаю, что это будет ... Я думаю, он просто дергает оператор using для пространства имен, на которое вы не ссылаетесь. FWIW - Coderush предлагает те же функциональные возможности "и многое другое!" :)
— Самурай Кен

1
Спустя примерно 4 года ReSharper 6.1 получил эту функцию!
— Жюльен Ронкалья

3

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


Я не рекомендую это для более крупного проекта. Мне было очень трудно понять, что использовалось, а что нет. Однако я тоже страдаю дальтонизмом, так что, вероятно, это повлияло на полезность этого для меня.
— DubiousPusher 06

2

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

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

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


1
Думаю, это отличное решение! Вы пишете плагины VS? :) У ILSpy есть плагин, и я собираюсь посмотреть, можно ли его каким-то образом легко полуавтоматизировать ...
— Стивен Коко,

@StevenCoco Я давно этого не делал, но API-интерфейс IDE довольно прост, с множеством хороших примеров в Интернете. Удачи и расскажите нам о своем проекте, если вы его закончите!
— toddmo

0

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

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


1
Это не всегда правильно. Например, если у вас есть класс Foo, производный от Bar, и у вас есть статический член Blah в Bar, и вы называете его Foo.Blah, тогда у вас должна быть сборка Foo в ссылках для компилятора, но она не будет сгенерирована в вывод, потому что статический член находится в Bar. Есть еще несколько подобных случаев.
— Илья Рыженков

Да, я заметил некоторые «дыры» в моем сценарии, но так и не понял, почему. Спасибо за информацию.
— Бенджол,

0

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


0

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

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