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


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.