Подтвердить что ты не робот

Как подсчитать количество строк кода в решении С# без комментариев и пустых строк и других избыточных материалов и т.д.?

Из-за избыточных вещей я имею в виду пространства имен, поскольку я знаю, что они необходимы, но если их 10 тыс., это не добавляет ценной информации в таблицу.

Можно ли это сделать с помощью Linq?

4b9b3361

Ответ 1

Не нужно изобретать велосипед. Взгляните на Visual Studio Code Metrics PowerTool 11.0

Обзор

Код Metrics PowerTool - это утилита командной строки, которая вычисляет метрики кода для вашего управляемого кода и сохраняет их в XML файле. Этот инструмент позволяет командам собирать и сообщать показатели кода как часть процесса сборки. Вычисляемые показатели кода:

• Индекс работоспособности

• Cyclomatic Complexity

• Глубина наследования

• Сочетание классов

• Линии кода (LOC)

Я знаю, что вы сказали, что у вас нет Ultimate, поэтому я просто хотел показать вам, чего вам не хватает.

Code Metrics in VS 2010 Ultimate

Для всех остальных SourceMonitor Source Monitor

Ответ 2

Visual studio сделает это за вас. Щелкните правой кнопкой мыши на своем проекте и выберите Calculate Code Metrics.

Ответ 3

От: http://rajputyh.blogspot.in/2014/02/counting-number-of-real-lines-in-your-c.html

private int CountNumberOfLinesInCSFilesOfDirectory(string dirPath)
{
    FileInfo[] csFiles = new DirectoryInfo(dirPath.Trim())
                                .GetFiles("*.cs", SearchOption.AllDirectories);

    int totalNumberOfLines = 0;
    Parallel.ForEach(csFiles, fo =>
    {
        Interlocked.Add(ref totalNumberOfLines, CountNumberOfLine(fo));
    });
    return totalNumberOfLines;
}

private int CountNumberOfLine(Object tc)
{
    FileInfo fo = (FileInfo)tc;
    int count = 0;
    int inComment = 0;
    using (StreamReader sr = fo.OpenText())
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            if (IsRealCode(line.Trim(), ref inComment))
                count++;
        }
    }
    return count;
}

private bool IsRealCode(string trimmed, ref int inComment)
{
    if (trimmed.StartsWith("/*") && trimmed.EndsWith("*/"))
        return false;
    else if (trimmed.StartsWith("/*"))
    {
        inComment++;
        return false;
    }
    else if (trimmed.EndsWith("*/"))
    {
        inComment--;
        return false;
    }

    return
           inComment == 0
        && !trimmed.StartsWith("//")
        && (trimmed.StartsWith("if")
            || trimmed.StartsWith("else if")
            || trimmed.StartsWith("using (")
            || trimmed.StartsWith("else  if")
            || trimmed.Contains(";")
            || trimmed.StartsWith("public") //method signature
            || trimmed.StartsWith("private") //method signature
            || trimmed.StartsWith("protected") //method signature
            );
}
  • Комментарии//и/* kind игнорируются.
  • Оператор, написанный в нескольких строках, считается отдельной строкой.
  • скобки (т.е. '{') не считаются строками. Строка
  • 'using namespace' игнорируется.
  • Линии, которые являются именем класса и т.д., игнорируются.

Ответ 4

У меня нет твердого представления о них, но вы можете использовать Значения кодовых показателей, чтобы получить некоторую статистику о вашем решении, например, строки кода.

Ответ 5

мы использовали куб tfs для получения данных о том, сколько строк добавляет/удаляет/меняет на наших tfs. Этот, который вы можете просмотреть с помощью excel. Но нужно правильно настроить его. И я не думаю, что это исключает комментарии и пустые строки и т.д.

Ответ 6

Ctrl + Shift + f (Найти в файлах) → put ";" в разделе "Найти что:" - текстовое поле → Нажмите кнопку "Найти все".

Этот чрезвычайно простой метод использует тот факт, что любой оператор С# заканчивается точкой с запятой. И, по крайней мере, я не использую точки с запятой в любом другом месте (например, в комментариях)...