Удаление неиспользуемого кода в Visual Studio

по отношению к этому вопросу:"удалить неиспользуемые ссылки (!= "using")", Я хотел бы знать, есть ли инструмент для удаления неиспользуемых классов, структур, делегатов и т. д. Из решения Visual Studio.

сценарий:

У меня есть неорганизованное решение Visual Studio, которое состоит из 1000:

  • импорт собственного метода
  • структуры
  • представители
  • перечисления

вместо того, чтобы пробираться через каждый файл, нажав "найти все ссылки" и определяя, используется ли код где-то, есть ли какой-либо механизм, где я могу просто удалить избыточные файлы кода легко?

пример:

//This class contains a method called getRandomValue which returns type RANDOM
public class NativeMethods
{
    [DllImport("random.dll")]
    public static extern RANDOM getRandomValue();
}

//This is the RANDOM object as referenced by getRandomValue();
[StructLayout(LayoutKind.Sequential)]
public struct RANDOM
{
    uint a;
    uint b;
    uint c;
}

//This is redundant since nothing is referencing it.
[StructLayout(LayoutKind.Sequential)]
public struct MESSAGE
{
    IntPtr sender;
    IntPtr recipient;
    char[] mText;
}

на заметку:

моя интуиция чувствует, что это будет сложно, так как в отличие от Java, имена объектов не должны быть идентичны имени файла, и несколько объявлений объектов могут находиться в одном файле, однако в этом случае (мой сценарий) каждый объект объявлен в своем собственном файле (с идентичным именем).

3 ответов


ReSharper-лучший выбор для очистки вашего кода.

вы можете использовать его бесплатно Спасибо Программа Раннего Доступа ReSharper.

enter image description here


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

FxCop найдет только неиспользуемый внутренний и частный код. Конечно, если вы убедитесь, что вы только публично выставляете код, который должен быть доступен за пределами вашей сборки, это должно быть хорошо.


как указал @Ergwun инструмент вопросом, что происходит может помочь найти неиспользуемые методы, поля и типы.

чтобы немного уточнить, NDepend предлагает написать правило кода над запросом LINQ (CQLinq). Вокруг 200 правил кода по умолчанию предлагаются, 3 из них посвящаются неиспользованных/мертвый код определение

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

// <Name>Dead Methods</Name>
warnif count > 0 
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m

NDepend rule to find unused methods (dead methods)

но это правило наивно и возвращает тривиальные ложные срабатывания. Существует много ситуаций, когда метод никогда не вызывается, но он не используется (точка входа, конструктор класса, финализатор...) вот почему 3 правила по умолчанию более уточнил:

NDepend интегрируется в Visual Studio 2017,2015, 2013, 2012, 2010, таким образом, эти правила могут быть проверено / просмотрено / отредактировано прямо внутри IDE. Инструмент также может быть интегрирован в ваш процесс CI, и он может создавать отчеты это покажет нарушенные правила и элементы кода виновника. NDepend также имеет VS Team Services extension.

Если вы нажмете эти 3 ссылки выше на исходный код этих правил, вы увидите, что те, о видах и методы слишком сложны. Это связано с тем, что они обнаруживают не только неиспользуемые типы и методы, но и используемые типы и методы только неиспользуемыми мертвыми типами и методами (рекурсивными).

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

в дополнение к использованию этих 3 Правил я бы посоветовал измерять охват кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть охвачен тестами, на самом деле неиспользованных/мертвый код, который можно спокойно выбросить. Это особенно полезно в сложных алгоритмах, где неясно, достижима ли ветвь кода или нет.

отказ от ответственности: я работаю на Вопросом, что происходит.