Удаление неиспользуемого кода в 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.
есть несколько инструментов, которые можно использовать для этого:
- FxCop (бесплатно)
- вопросом, что происходит (платная)
- Resharper (платная)
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
но это правило наивно и возвращает тривиальные ложные срабатывания. Существует много ситуаций, когда метод никогда не вызывается, но он не используется (точка входа, конструктор класса, финализатор...) вот почему 3 правила по умолчанию более уточнил:
- потенциально мертвого (следовательно, обнаружение неиспользуемого класса, структуры, интерфейса, делегата...)
- потенциально мертвых Методы
- потенциально мертвые поля
NDepend интегрируется в Visual Studio 2017,2015, 2013, 2012, 2010, таким образом, эти правила могут быть проверено / просмотрено / отредактировано прямо внутри IDE. Инструмент также может быть интегрирован в ваш процесс CI, и он может создавать отчеты это покажет нарушенные правила и элементы кода виновника. NDepend также имеет VS Team Services extension.
Если вы нажмете эти 3 ссылки выше на исходный код этих правил, вы увидите, что те, о видах и методы слишком сложны. Это связано с тем, что они обнаруживают не только неиспользуемые типы и методы, но и используемые типы и методы только неиспользуемыми мертвыми типами и методами (рекурсивными).
Это статический анализ, следовательно префикс потенциально в имена правила. Если используется элемент кода только через отражения, эти правила могут считать его неиспользованным, что не так.
в дополнение к использованию этих 3 Правил я бы посоветовал измерять охват кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть охвачен тестами, на самом деле неиспользованных/мертвый код, который можно спокойно выбросить. Это особенно полезно в сложных алгоритмах, где неясно, достижима ли ветвь кода или нет.
отказ от ответственности: я работаю на Вопросом, что происходит.