Видаліть невикористані посилання (! = "Використання")


100

Як знайти та видалити невикористані посилання у своїх проектах?

Я знаю, що ви можете легко видалити використання операторів у порівнянні з 2008 роком, але це не видаляє фактичну посилання у ваших проектах. Згаданий dll все ще буде скопійовано у ваш пакет bin / setup.


Дякую. На жаль, жодної відповіді я не шукав ...
Борис Калленс

Відповіді:


55

* Примітка: див. Http://www.jetbrains.net/devnet/message/5244658 для іншої версії цієї відповіді.

Читаючи дописи, схоже, що в початковому питанні є певна плутанина. Дозвольте мені зробити це колотою.

Оригінальний пост справді задає питання: "Як я можу визначити та видалити посилання з одного проекту Visual Studio на інші проекти / склади, які не використовуються?" Плакат хоче, щоб збірки більше не з'являлися як частина результату збірки.

У цьому випадку ReSharper може допомогти вам їх ідентифікувати , але вам доведеться їх видалити самостійно.

Для цього відкрийте браузер References inth Solution Browser, клацніть правою клавішею миші на кожній посиланні і виберіть пункт «Знайти залежний код». Побачити:

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

Ви або отримаєте:

  1. Список залежностей від цієї Довідки у вікні браузера, або

  2. Діалогове вікно про те, що "Код, залежний від модуля XXXXXXX, не знайдено".

Якщо ви отримаєте другий результат, ви можете правою кнопкою миші клацнути посилання, вибрати пункт Видалити та видалити його зі свого проекту.

Хоча вам доведеться це "вручну", тобто по одній посиланні за один раз, це буде виконано роботу. Якщо хтось яким-небудь чином автоматизував це, мені цікаво почути, як це робилося.

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

Деякі повідомлення, здається, відповідають на питання: "Як видалити за допомогою пунктів (C #) з файлу вихідного коду, які не потрібні для вирішення будь-яких посилань у цьому файлі".

У цьому випадку ReSharper допомагає двома способами:

  1. Виявляє невикористані за допомогою пунктів під час виявлення помилок на льоту. Вони відображаються як попередження щодо перевірки коду - у файлі код з’явиться сірим (за замовчуванням), і 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 дуже корисні.


Приємна обширна відповідь. Що дивно, що хоч ви знаєте, що я не маю на увазі використання тверджень (що очищення є стандартним для VS, не зрозумійте, чому R # переосмислив це), ви спочатку відповідаєте на це запитання. Ви б не подумали про переключення двох навколо?
Борис Калленс

Зроблю. Функція ReSharper передує реалізації Visual Studio. Залишається так, як це досягається завдяки їх функції "автокорекція" - Smart Tags вимикаються, коли у вас є ReSharper.
jlo

1
Зараз ~ 4 роки останній ReSharper 6.1 отримав цю функцію безпосередньо!
Жульєн Ронкалья

Не впевнений, що ви маєте на увазі - ReSharper вже багато років має цю особливість.
jlo

8
ЗАБЕЗПЕЧИТИ: Якщо ви використовуєте будь-який вид відображення для динамічного завантаження з збірок, це буде погано. Ви будете використовувати "посилання", щоб перенести збірку з собою на кошик для виробництва / виробництво, але код не посилається безпосередньо на нього. ВИКОРИСТОВУЙТЕ З ДОГЛЯДОЮ!
Каспер Леон Нільсен

12

ви можете використовувати розширення " Видалити невикористані посилання ", яке я написав:

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


це розширення не публікується
stombeur

1
Спочатку мені це подобається! Але потім з подальшим тестуванням він видалив потрібні мені посилання. Більш детальну інформацію про помилку можна знайти тут: wpfsharp.com/2012/04/04/…
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 в папці References? Я не думаю, що це робить це?
tobinharris

1
Я не думаю, що це буде ... Я думаю, що це просто пов'язує оператор використання для простору імен, на який ви не посилаєтесь. FWIW - Coderush пропонує однаковий функціонал "та багато іншого!" :)
Самурай Кен

1
Зараз ~ 4 роки останній ReSharper 6.1 отримав функцію!
Жульєн Ронкалья

3

Я зробив це без розширення в VS 2010 Ultimate Architecture-> Створити графік залежності-> За складанням він показує використані збірки та видалив невикористані посилання вручну.


Я не рекомендую цього для більшого проекту. Мені було дуже важко розрізнити, що було, а що не було використано. Однак у мене також трапляються кольорові сліпі, так що це, ймовірно, вплинуло на корисність цього для мене.
DubiousPusher

2

У мене є безкоштовна відповідь, яка працює в будь-якій версії Visual Studio і будь-якій версії Framework. Він не видаляє невикористані посилання, але ідентифікує їх.

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

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


1
Я думаю, що це чудове рішення! Ви пишете плагіни VS? :) У ILSpy є плагін, і я побачу, чи можна його якось легко напівавтоматизувати ...
Стівен Коко

@StevenCoco У мене вже давно немає, але IDE api досить відвертий з великою кількістю хороших прикладів в Інтернеті. Удачі та оновлюйте нас своїм проектом, якщо ви це зробите!
toddmo

0

Зважаючи на те, що VisualStudio (або це msbuild?) Виявляє невикористані посилання та не включає їх у вихідний файл, ви можете написати скрипт, який аналізує посилання з csproj, і порівнює цей з посиланням на Асамблеї, виявлені рефлексією на вихід проекту.

Якщо ви мотивовані ...


1
Це не завжди правильно. Наприклад, якщо у вас є клас Foo, який походить від Bar, і у вас є статичний член Blah в Bar, і ви називаєте його як Foo.Blah, тоді ви повинні мати збірку Foo в посиланнях на компілятор, але він не буде випущений на вихід, тому що статичний член знаходиться в Bar. Є ще такі випадки, як цей.
Ілля Риженков

Так, я помітив якісь «дірки» в своєму сценарії, і ніколи не замислювався над тим, щоб розібратися, чому. Дякуємо за інформацію.
Бенжол

0

Я думаю, що вони скопійовані у бін \, тому що в проекті, який видалив посилання, є посилання на інший проект, який має ту саму посилання ...


0

Якщо ви знаєте, які посилання не використовуються, їх можна видалити вручну.
У Провіднику рішень клацніть правою кнопкою миші посилання у вузлі Посилання та натисніть Видалити.

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